[尝试在构建服务器上构建项目会给我以下错误:
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解决了这个问题。但是现在我要从头开始安装新服务器,我想知道是否有更好的解决方案来解决此问题。
要回答问题的标题(但不回答关于您得到的输出的问题):
如果是Web应用程序,则将以下文件夹从开发机复制到构建服务器可解决此问题
C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications
根据构建中断方式删除x86。如果您有其他项目类型,则可能需要复制整个msbuild文件夹。
如果将Visual Studio 2012迁移到2013,请使用edior打开* .csproj项目文件。并检查“项目”标签的ToolsVersion元素。
将其值从4.0更改为12.0
来自
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" ...
To
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="12.0" ...
或者如果您使用msbuild进行构建,则只需指定VisualStudioVersion属性
msbuild /p:VisualStudioVersion=12.0
似乎新版本的msbuild并未附带Microsoft.WebApplication.targets。要解决此问题,您需要这样更新csproj文件:
1)编辑Web应用程序csproj(右键单击)。在底部的csproj中找到有关构建工具的部分。它应该看起来像这样。
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
2)您需要在VisualStudioVersion标记下方添加一条VSToolsPath行,因此看起来像这样
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<!--Add the below line to fix the project loading in VS 2017 -->
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
<!--End -->
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
参考链接:https://alastaircrabtree.com/cannot-open-vs-2015-web-project-in-vs-2017/
这就是您所需要的。只有103MB。不要安装所有内容
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9GRW52Si5wbmcifQ==” alt =“在此处输入图像描述”>
我的解决方案是这里几个答案的混合。
我检查了构建服务器,并且已经安装了Windows7 / NET4.0 SDK,所以确实找到了路径:
C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v9.0 \ WebApplications \ Microsoft.WebApplication.targets`
但是,在此行:
]
$(MSBuildExtensionsPath)扩展为没有路径的C:\ Program Files \ MSBuild。
因此,我要做的是使用此命令创建符号链接:
mklink / J“ C:\ Program Files \ MSBuild \ Microsoft \ VisualStudio”“ C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio”
这样,$(MSBuildExtensionsPath)可以扩展到有效路径,而无需在应用程序本身中进行任何更改,仅需要在构建服务器中进行更改(也许可以在每个构建中创建符号链接,以确保这一步不会丢失,并且可以“已记录”)。
我通过添加来解决此问题/p:VCTargetsPath="C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V120"
进入Build > Build a Visual Studio project or solution using MSBuild > Command Line Arguments
我尝试了很多解决方案,但最后这个答案对我有用:https://stackoverflow.com/a/19826448/431522
基本上,它需要从MSBuild目录而不是Visual Studio目录中调用MSBuild。
我还将MSBuild目录添加到我的路径中,以使脚本更易于编码。
如果您使用的是MSBuild,例如构建服务器,对我有用的是:
更改以下内容:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
至:
<Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
我的Msbuild命令是:*"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" solution.sln /p:Configuration=Debug /p:Platform="Any CPU"*
希望这对某人有帮助。
如果未安装VS,则不支持构建和发布WAP。话虽如此,如果您真的不想安装VS,则需要复制%ProgramFiles32%\MSBuild\Microsoft\
下的所有文件。
您还将需要安装Web Deploy Tool。我认为就是这样。
C:> msbuild“ C:\\ DotnetCi.sln” / p:配置=发布/ p:UseWPP_CopyWebApplication = true / p:PipelineDependsOnBuild = false
UPD:从VS2017开始,构建工具中的工作负载已完全消除了此问题。参见@SOReader answer。
如果不想在构建服务器上进行任何修改,而您仍然希望直接从源代码控制中构建项目,则最好将所需的二进制文件置于源代码控制之下。您需要修改项目文件中的imports部分,如下所示:
<Import Project="$(SolutionDir)\BuildTargets\WebApplications\Microsoft.WebApplication.targets" />
<Import Condition="false" Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
第一行是相对于解决方案目录的新位置的实际导入。第二个是原始行的关闭版本(Condition="false"
),它允许Visual Studio仍将您的项目视为有效的Web应用程序项目(这就是VS 2010 SP1本身的技巧)。
不要忘记将C:\Program Files (x86)\Microsoft\VisualStudio\v10.0\WebApplications
复制到源代码管理下的BuildTargets
文件夹。
您还可以使用NuGet包MSBuild.Microsoft.VisualStudio.Web.targets,在Visual Studio项目中引用它们,然后按照Andriy K的建议更改引用。
现在,在2017年,您可以使用MSBuildTools安装WebApplication redist。只需转到将下载MSBuild 2017工具的this page,然后在安装时单击Web development build tools
即可安装以下目标:
默认情况下,这将导致在C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications
中安装缺少的库
基于this post here,您只需下载Microsoft Visual Studio 2010 Shell (Integrated) Redistributable Package并安装目标。
这避免了在生成服务器上安装Visual Studio的需要。
我现在已经尝试过了,可以验证它是否有效:
之前:
错误MSB4019:导入的项目“ C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications \ Microsoft.WebApplication.targets“没找到。确认声明中的路径是正确,并且文件存在于磁盘上。
安装后:
[正确构建]
显然,这比在生成服务器上安装Visual Studio更好。
如上所述,除了用于Microsoft.WebApplication.targets的"Microsoft Visual Studio 2010 Shell (Integrated) Redistributable Package"和用于Microsoft.Data.Schema.SqlTasks.targets的"Microsoft Visual Studio Team System 2008 Database Edition GDR R2"之外,最新的Windows SDK还可以减轻安装Visual Studio 2010的需要。实际上,安装VS 2010可能会减少总体下载量,最终减少工作量。
目标:无需更改/无需构建代理安装
我对NuGet approach by Lloyd here采用了混合方法,该方法基于committing binary dependencies solution by Andrik.
我之所以希望能够添加新的构建代理,而不必使用诸如此类的项目对其进行预配置。
[solution]\packages\MSBuild.Microsoft.VisualStudio.Web.targets.nn.n.n.n\tools\VSToolsPath\
在版本7中,我执行了以下操作。这可能不是必需的,并且现在绝对不需要基于注释。请参阅下面的评论。
env.VSToolsPath
添加一个构建Paramenter,并将其设置为VSToolsPath文件夹;我使用了..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath