使用MSBuild在Server 2016上构建以.Net 4.0为目标的ASP.Net项目

时间:2017-08-18 00:03:33

标签: .net windows msbuild .net-4.0 windows-server-2016

我在Windows Server 2016上设置了Jenkins构建服务器。我安装了“Visual Studio 2017构建工具”(最新版本的MSBuild)。当我尝试构建一个针对.Net 4.0的项目时,我收到此错误消息:

  

C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ BuildTools \ MSBuild \ 15.0 \ Bin \ Microsoft.Common.CurrentVersion.targets(1122,5):错误MSB3644:框架“.NETFramework”的参考程序集,版本= v4.0“未找到。要解决此问题,请为此框架版本安装SDK或Targeting Pack,或者将应用程序重新定位到已安装SDK或Targeting Pack的框架版本。请注意,程序集将从全局程序集缓存(GAC)中解析,并将用于代替引用程序集。因此,您的程序集可能无法正确定位到您想要的框架。

所以我检查'C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0'并发现,确实,此文件夹中没有dll,只有xml文件。

所以我尝试安装完整的.Net 4.0框架,以便安装参考程序集,但是我收到了这些消息:

  

1)Microsoft .NET Framework 4已经是此操作系统的一部分。您无需安装.NET Framework 4可再发行组件。

     

2)此计算机上已安装相同或更高版本的.NET Framework 4。

所以我谷歌周围找到几个像'.NET Framework 4.5.2 is considered to be an "in-place update" to the .NET 4 family, with no need to recompile applications'这样的网站,我想也许我可以安装.Net 4.5.2定位包并使用MSBuild的这个参数来定位它们:

/property:FrameworkPathOverride="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2"

果然,这似乎有效。问题是我不完全了解参考组件和目标包等等。我担心的是,虽然看起来我可能已经解决了这个问题,但我会在后来发现更远的地方,我已经介绍了其他一些令人讨厌的问题。

问题

  • 我做了什么问题?
  • 有没有更好的方法可以做到这一点?

更新

我没有提到我还试图通过this link安装.Net Framework 4.0.3 milti-targeting pack但是我收到以下错误:

  

找不到Microsoft .NET Framework 4多目标包。请修复Microsoft Visual Studio 2010的安装以获取此更新。

1 个答案:

答案 0 :(得分:1)

简短回答

我不建议您继续使用FrameworkPathOverride。这会将您的应用程序更改为编译,就好像它是.NET 4.5.2而不是4.0。会产生意想不到的后果。

您可以在此处下载.NET Framework 4.0定位包:https://www.microsoft.com/en-us/download/details.aspx?id=29052

或者,您可以使用Visual Studio 2017安装程序下载.NET 4.0定位包,方法是在" Individual Components"中选择它。

vs installer

更多细节

  

问题是我不完全了解参考装配和目标包等等。

"参考组件"基本上就像.NET中的头文件。编译.NET Framework 4.0的应用程序时,您可以定位" .NET 4.0运行时中可用的API。这构成了应用程序可以运行的最小运行时版本。但是,应用程序将在安装在计算机上的.NET Framework运行时版本上执行(它是一个全局的共享版本),几乎肯定会比4.0更新。

安装定位包只意味着您要安装'标头文件的副本。到你的机器。您的计算机仍将安装.NET Framework 4.5.x或4.6运行时。

由于.NET 4.0不受支持且大多数机器将具有4.5.2或更高版本,因此您应该考虑针对.NET Framework 4.5.2进行编译。您可以从Visual Studio中的项目属性页执行此操作。或者,您可以编辑csproj文件。

如果你正在使用" classic",更详细的csproj格式,那将是这样的

   <PropertyGroup>
      <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
   </PropertyGroup>

如果你正在使用&#34;新的&#34;,更轻薄的csproj for VS 2017,那将是

   <PropertyGroup>
      <TargetFramework>net452</TargetFramework>
   </PropertyGroup>