在引用NetStandard20程序集的Framework461解决方案上使用MSBUILD

时间:2018-01-16 04:51:10

标签: c# .net msbuild .net-core .net-standard

我甚至不确定我尝试做的事情是否可能......

示例代码:here

基本上,我已经构建了一个netstandard20类库,根据.NET实现支持列表,它应该与framework461项目兼容(假设您拥有.NET Core 2.0 SDK)。

enter image description here

我可以构建netstandard20类库而不用担心并重新获取DLL(它包含在示例代码中)。

这是问题的开始,当试图运行msbuild .\netstandard_test.sln来构建framework461项目时,我得到了一大堆(我认为是误导性的)关于' netstandard'没被引用(它是)。

enter image description here

但是,如果我运行dotnet build(或从VS2017构建),一切都按预期工作。

我尝试导入各种版本的NetStandard,NetStandard.Library和NetStandard.Library.Framework,以及引用Microsoft.DotNet.BuildTools,但这似乎没有帮助。

有没有办法使用msbuild构建它?我们有一个单一的构建和部署过程,如果可以避免的话,我宁愿不必改变它。谁知道还有什么会出错!

2 个答案:

答案 0 :(得分:1)

要使用.NET Core或.NET Standard进行构建,您需要使用.NET Core SDK中的dotnet msbuild command而不是普通的msbuild

dotnet msbuild .\netstandard_test.sln /p:Configuration=Release

这也适用于.NET Framework 4.6.1(和旧版本)。

请注意,Microsoft已提供install scripts,以便在持续集成服务器上轻松安装.NET Core SDK。

答案 1 :(得分:0)

您需要使用最近的15. *版本(目前为15.5。*)的MSBuild,并确保"跨平台开发"工作负载安装在visual studio中。这将添加所需的组件以查找.NET Core SDK,其中包含.NET标准和.NET Core项目使用的Microsoft.NET.SdkMicrosoft.NET.Sdk.Web等MSBuild SDK。

然后,您可以使用开发人员命令提示符中的msbuild来构建这些项目。我建议添加/restore(msbuild> = 15.5。*)以确保基于sdk的项目发生NuGet恢复。

由于VS 2017没有安装"全球" MSBuild的版本,请务必使用VS 2017文件夹中安装的MSBuild版本(请与msbuild /versionwhere msbuild联系)。

使用包含文件引用或非字符串属性的.resx文件时,

dotnet msbuild有一些限制。此外,它不支持COM引用或构建强命名程序集。如果您需要任何这些功能,请使用msbuild(VS 2017)而不是dotnet msbuild(.NET Core CLI)