在构build服务器上找不到Microsoft.WebApplication.targets。 你的解决scheme是什么?
试图在构build服务器上构build我的项目给我以下错误:
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。 但现在我从头开始设置一个新的服务器,我想知道是否有更好的解决scheme来解决这个问题。
要回答问题的标题(但不是关于输出的问题):
如果只是Web应用程序,将以下文件夹从开发机器复制到构build服务器将修复此问题
C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications
根据您的构build中断方式来移除x86。 如果你有其他的项目types,你可能需要复制整个msbuild文件夹。
如果未安装VS,则不支持构build和发布WAP。 这就是说,如果你真的不想安装VS,那么你将需要复制%ProgramFiles32%\MSBuild\Microsoft\
下的所有文件。
您还需要安装Web部署工具 。 我想是的。
如果您不想修改构build服务器上的任何内容,并且仍希望项目能够直接从源代码pipe理中进行构build,那么将所需的二进制文件置于源代码pipe理之下可能是一个好主意。 您需要修改项目文件中的imports部分,如下所示:
<Import Project="$(SolutionDir)\BuildTargets\WebApplications\Microsoft.WebApplication.targets" /> <Import Condition="false" Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
第一行是相对于解决scheme目录的新位置的实际导入。 第二个是原始行的closures版本( Condition="false"
),它允许Visual Studio将项目视为有效的Web应用程序项目(这是VS 2010 SP1本身的技巧)。
不要忘记将C:\Program Files (x86)\Microsoft\VisualStudio\v10.0\WebApplications
复制到源代码pipe理下的BuildTargets
文件夹中。
基于这篇文章,您可以简单地下载Microsoft Visual Studio 2010 Shell(集成)可再发行组件包,并安装目标。
这样可以避免在构build服务器上安装Visual Studio。
我刚刚试过这个,可以validation它的工作原理:
之前:
错误MSB4019:未find导入的项目“C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications \ Microsoft.WebApplication.targets”。 确认声明中的path是正确的,并且该文件存在于磁盘上。
安装完成后:
[正确构build]
这显然比在构build服务器上安装Visual Studio要好得多。
您也可以使用NuGet包MSBuild.Microsoft.VisualStudio.Web.targets ,在Visual Studio项目中引用它们,然后按照Andriy K的build议更改参考。
如上所述,除了用于Microsoft.WebApplication.targets的“Microsoft Visual Studio 2010 Shell(集成)可再发行组件包”和用于Microsoft.Data.Schema的“Microsoft Visual Studio Team System 2008数据库版GDR R2”之外,最新的Windows SDK .SqlTasks.targets应该减轻安装Visual Studio 2010的需要。但是,安装VS 2010可能实际上是整体下载和减less工作。
通过NuGet添加依赖关系并设置生成参数
目标:构build代理不需要更改/安装
我在这里采用了Lloyd的NuGet方法的混合方法,这是基于Andrik提交的二进制依赖关系解决scheme。
我之所以想要能够添加新的构build代理,而无需像这样预先configuration它们。
- 在装有Visual Studio的机器上,打开解决scheme; 忽略Web项目失败。
- 在NuGet包pipe理器中 ,像Lloyd提到的那样添加MSBuild.Microsoft.VisualStudio.Web.targets 。
- 这将解决二进制文件到
[solution]\packages\MSBuild.Microsoft.VisualStudio.Web.targets.nn.nnn\tools\VSToolsPath\
- 您可以将这些复制到引用文件夹&提交,
- 或者只是在他们所在的地方使用它们。 我select了这个,但是我将不得不在后面的path中处理版本号。
- 接下来,在您的TeamCity构buildconfiguration中,为
env.VSToolsPath
添加一个构build参数,并将其设置为VSToolsPath文件夹; 我用..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath
当我在维护方面达到我认为最好的状态,并且能够启动新的构build代理时,我会更新这篇文章。
在构build/ CI服务器上构build时,通过指定/p:VSToolsPath=''
closuresMicrosoft.WebApplication.targets
的导入。 这基本上会使下面一行的条件成为错误:
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
TeamCity中就是这么做的:
如果将Visual Studio 2012迁移到2013,则使用edior打开* .csproj项目文件。
并检查“Project”标签的ToolsVersion元素。
将其值从4.0更改为12.0
-
从
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" ...
-
至
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="12.0" ...
或者,如果您使用msbuild构build,那么只需指定VisualStudioVersion属性即可
msbuild /p:VisualStudioVersion=12.0
解决scheme来源
这是你所需要的。 只有103MB。 不要安装所有东西
我发现这在MS连接 :
是的,您需要在生成计算机上安装Visual Studio 2010来构build数据库项目。 这样做不需要额外的Visual Studio许可证。
所以,这是我现在唯一的select。
看来msbuild的新版本不附带Microsoft.WebApplication.targets。 要解决你需要更新你的csproj文件,如下所示:
1)编辑Web应用程序csproj(右键单击)。 在csproj中查找关于构build工具的底部。 它应该是这样的。
<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/
我的解决scheme是这里几个答案的组合。
我检查了构build服务器,并已安装Windows7 / NET4.0 SDK,所以我find了path:
C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v9.0 \ WebApplications \ Microsoft.WebApplication.targets`
但是,在这一行上:
<Import Project =“$(MSBuildExtensionsPath)\ Microsoft \ VisualStudio \ v9.0 \ WebApplications \ Microsoft.WebApplication.targets”/>
$(MSBuildExtensionsPath)扩展到C:\ Program Files \ MSBuild没有path。
因此我所做的就是使用这个命令创build一个符号链接:
mklink / J“C:\ Program Files \ MSBuild \ Microsoft \ VisualStudio”“C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio”
这样$(MSBuildExtensionsPath)扩展到一个有效的path,不需要在应用程序本身进行任何更改,只有在构build服务器(也许可以创build每个构build的符号链接,以确保此步骤不会丢失,并“logging“)。
我通过添加解决这个问题
/p:VCTargetsPath="C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V120"
成
Build > Build a Visual Studio project or solution using MSBuild > Command Line Arguments
我尝试了一堆解决scheme,但最终这个答案为我工作: https : //stackoverflow.com/a/19826448/431522
它基本上需要从MSBuild目录中调用MSBuild,而不是Visual Studio目录。
我也添加了MSBuild目录到我的path,使脚本更容易编码。
现在,在2017年,您可以使用MSBuildTools安装WebApplication redists。 只要到这个页面下载MSBuild 2017 Tools,安装时点击Web development build tools
也可以安装这些目标:
这将导致默认安装C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications
默认库
我已经成功地将我的开发机器中的文件复制到TFS。 他们应该住在两台机器的同一个地方。