Jas*_*oyd 2 .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,Version =”的参考程序集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。
因此,我在 Google 上搜索并找到了几个网站,上面写着“.NET Framework 4.5.2 被认为是 .NET 4 系列的“就地更新”,无需重新编译应用程序”,我想也许我可以只需安装 .Net 4.5.2 目标包并使用 MSBuild 的此参数来定位它们:
/property:FrameworkPathOverride="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2"
Run Code Online (Sandbox Code Playgroud)
果然,这似乎有效。问题是我不完全理解参考程序集和目标包等等。我担心,虽然看起来我可能已经解决了这个问题,但稍后我会发现,在更远的地方,我引入了一些其他令人讨厌的问题。
我没有提到我还尝试通过此链接安装 .Net Framework 4.0.3 milti-targeting 包,但出现以下错误:
未找到 Microsoft .NET Framework 4 多目标包。请修复您的 Microsoft Visual Studio 2010 安装才能获取此更新。
我不建议您继续使用 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 目标包。
问题是我不完全理解参考程序集和目标包等等。
“参考程序集”基本上类似于 .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 文件。
如果您使用“经典”、更详细的 csproj 格式,那就像这样
<PropertyGroup>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
如果您使用 VS 2017 的“新”、更精简的 csproj,那就是
<PropertyGroup>
<TargetFramework>net452</TargetFramework>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1978 次 |
| 最近记录: |