obj目录中的* .dll.licenses文件不是用TeamCity中的msbuild创build的

我正在将我们的TeamCity项目从VS2012升级到VS2015,并且正在编译我们的MVC应用程序。

旧的MSBuild(v4.0.30319.34209)在obj目录下生成一个名为MyApplication.Web.Mvc.dll.licenses的文件,这显然是构build所需的,但是我们不知道该文件实际用于什么目的。

新的MSBuild(v14.0.23107.0)不创build此MyApplication.Web.Mvc.dll.licenses文件,因此生成失败,出现以下错误:

 CSC error CS1566: Error reading resource 'MyApplication.Web.Mvc.dll.licenses' -- 'Could not find file 'C:\BuildAgent\work\58ddf5f1234d8c8a\application\MyApplication\MyApplication.Web.Mvc\obj\Release\MyApplication.Web.Mvc.dll.licenses'.' 

我一直在机器上通过cmd手动运行构build,并且每当使用旧的msbuild运行构build时,就会创builddll.licenses文件,而不是新构build。

该文件在运行VS2015的开发机器上创build,但不在Teamcity构build服务器上。 所以在我看来,别的东西已经过时了?

多一点Googlesearch后,我偶然发现MSDN上的这个线程 。

这里build议的解决scheme是安装Windows 10 SDK 。 我们使用默认安装选项在运行Windows Server 2012 R2的TeamCity构build服务器上执行此操作,重新启动后,我们的构build再次运行。

希望这可以帮助 :)

答案“安装Windows 10 SDK”是正确的 – 基本上。 但是还有一个额外的缺陷:这个SDK的版本不止一个: https : //developer.microsoft.com/en-us/windows/downloads/sdk-archive

通过撰写这个评论:

  • 2015年7月(版本10.0.26624.0)包含.NET Framework 4.6 SDK
  • 2015年11月(版本10.0.10586.212)包含.NET Framework 4.6.1 SDK
  • 2016年8月(版本10.0.14393.0)包含.NET Framework 4.6.2 SDK

检查你的VS 2015输出和什么版本的LC.exe被调用。 然后在生成服务器上安装相应的SDK。 别忘了安装Microsoft Build Tools 2015。

注意:我的构build是针对.net 4.5,但需要使用2015版工具在TeamCity上进行构build。

在我的情况下,TFS正在使用旧SDK文件夹中的许可证编译器lc.exe

 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\lc.exe 

代替

 C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\x64\LC.exe 

此问题已通过将以下msbuild参数添加到构build定义来解决:

 /p:FrameworkOverride="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2" 

您还可以摆脱这些问题,并通过在构build服务器上安装Visual Studio并添加一个Visual Studio构build步骤来替代您的2015年msbuild步骤

我使用Atlassian Bamboo作为我们的构build服务器,但是在这里描述了完全相同的问题。 我尝试了这个线程中的每一个解决scheme,但没有得到任何工作。 最后,我使用了Visual Studio 2017附带的新版本的MSBuild,并突然创build了我的许可证dll。 在我的情况下,可以在以下位置findMSBuild.exe:

C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ BuildTools \ MSBuild \ 15.0 \ Bin \ MSBuild.exe

可能对某人有所帮助:

安装Windows 10 SDK并重新启动我的服务器后,我添加了/p:VisualStudioVersion=14.0 /p:TargetFrameworkVersion=v4.5.2到我的msbuild.exe。 这解决了我的情况。

使用VisualBuild构build时,我们遇到了同样的问题。 我find了一个没有安装Win10 SDK的解决scheme:

在项目属性“编译设置”中,我们添加了一个“预生成事件命令行”,如下所示:

 pushd "%VS120COMNTOOLS%..\..\VC" call vcvarsall.bat popd pushd $(ProjectDir)\"My Project" lc /target:$(TargetFileName) /complist:licenses.licx /outdir:"..\obj\$(ConfigurationName)" popd popd 

此命令使用(较旧的)VS12工具并在构build项目之前手动启动lc编译器工具,并将licenses.licx文件编译到* .licenses资源文件

这是一个密切相关,但稍有不同的情况,我正在使用jenkins来控制build设…

我不得不做出一些改变。

  1. 在生成服务器上安装了Windows 10 SDK。 在我的情况下,安装SDK“显露”了MSBuild没有生成* .dll.licenses文件的底层错误。
  2. 添加/tv:14.0(/ToolsVersion:14.0)到我的构build参数。

/ p:configuration=发布/p:VisualStudioVersion=14.0 /tv:14.0 /详细程度:正常

  1. 在执行MSBuild步骤之前手动创build许可证文件。 以下命令创build文件“myproject.dll.licenses”。

cd“C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6.2 Tools”

\ lc.exe /target:MyProject.dll / complist:“C:\ Program Files(x86)\ Jenkins \ jobs \ MyProject \ workspace \ MyProject \ licenses.licx”/ i:“C:\ Program Files \ nsoftware \ E-Payment Integrator V6 .NET Edition \ lib \ nsoftware.InPayWeb.dll“/ outdir:”C:\ Program Files(x86)\ Jenkins \ jobs \ MyProject \ workspace \ MyProject \ obj \ Release“