试图在构建服务器上构建我的项目给我以下错误:
Microsoft (R) Build Engine Version 4.0.30319.1
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.SqlTasks.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
几个月前,我通过在Build Server上安装Visual Studio 2010解决了这个问题。但是现在我从头开始安装一个新的服务器,我想知道是否有更好的解决方案来解决这个问题。
根据这篇文章,你可以简单地下载Microsoft Visual Studio 2010 Shell (Integrated) Redistributable Package并安装目标。
这避免了在构建服务器上安装Visual Studio的需要。
我刚刚尝试了这一点,现在可以验证它的工作:
之前:
错误MSB4019:导入项目“C:\Program Files .
微软(x86) \ [\ \ VisualStudio \ v10.0 \ WebApplications \ Microsoft.WebApplication.targets”
没有找到。确认声明中的路径为
正确,并且该文件存在于磁盘上。
安装后:
(构建正确)
显然,这是比在构建服务器上安装Visual Studio更好的解决方案。
通过NuGet添加依赖项并设置一个构建参数
目标:对构建代理没有必要的更改/安装
我在这里采用了Lloyd的NuGet方法的混合方法,该方法基于Andrik的提交二进制依赖解决方案。
原因是我希望能够添加新的构建代理,而不需要使用诸如此类的项预先配置它们。
在机器上用Visual Studio打开解决方案;忽略web项目失败。
在NuGet包管理器中,添加MSBuild.Microsoft.VisualStudio.Web。目标,正如Lloyd提到的。
这将把二进制文件解析为[solution]\packages\ msbuild . microsoft . visualstudio . web .target .nn.n.n.n\tools\VSToolsPath\
你可以把这些复制到引用文件夹并提交,
或者就在它们所在的地方使用它们。我选择了这个,但是稍后我将不得不处理路径中的版本号。
在版本7中,我执行了以下操作。这可能是不必要的,根据评论,现在肯定不需要了。请看下面的评论。
接下来,在TeamCity构建配置中,为env添加一个构建参数。VSToolsPath并将其设置为VSToolsPath文件夹;我使用的是..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath
我的解决方案是这里几个答案的混合。
我检查了构建服务器,Windows7/NET4.0 SDK已经安装,所以我确实找到了路径:
C:\Program Files (x86)\MSBuild\Microsoft\ VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets
但是,在这一行:
<进口项目=”(MSBuildExtensionsPath美元)\ Microsoft \ VisualStudio v9 WebApplication 0 WebApplications \ Microsoft。很明显" - >
$(MSBuildExtensionsPath)扩展到C:\Program Files\MSBuild,其中没有路径。
因此,我所做的就是创建一个符号链接,使用下面的命令:
mklink /J "C:\Program Files\MSBuild\Microsoft\VisualStudio" "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio"
通过这种方式,$(MSBuildExtensionsPath)扩展到一个有效的路径,应用程序本身不需要更改,只需要在构建服务器中更改(也许可以在每个构建中创建符号链接,以确保这一步不会丢失并被“记录”)。