VS2017为多个框架目标创建一个lib

时间:2017-04-13 17:03:12

标签: c# .net .net-core xunit .net-standard-1.5

我有一个简单的Dll,我在这里定义了一些类:

public class Parameters 
{
    public string Message { get; set; }
}

我添加了一个NuGet包Newtonsoft.Json

此DLL必须由 netcoreapp1.1 net462 使用。

我试图修改csproj并添加了这个

<TargetFramework>netstandard1.5</TargetFramework>

如果我启动了dotnet构建,则dll已成功构建,但我无法从net462使用netcore应用程序中的DLL

特别是如果我添加xUnit测试并在DLL中引用一个类,则会引发错误:

  

System.IO.FileLoadException:无法加载文件或程序集&System; Run.Runtime,Version = 4.1.0.0 [..]

任何人都可以向我解释一下net462netcoreappnetstandard1.5目标框架的工作原理?如何构建一个dll交叉框架?

更新

要查找相关程序集,必须在xunit .csproj

上添加以下代码
<OutputType>Exe</OutputType>

1 个答案:

答案 0 :(得分:1)

您可以找到.Net Standard平台支持here的表格。您需要了解.Net Standard 一个框架,它是图书馆为.Net Standard支持实施的规则。

因此,如果您需要图书馆同时支持.Net Core.Net Framework 4.6,则need to target .Net Standard 1.6.1 (!),而不是1.5或1.6, {{1} },according to this blog(注意复数形式的标签)。

.Net Framework

也许它可以在没有<TargetFrameworks>netstandard1.6.1;net462</TargetFrameworks> 的情况下工作,因为它应该支持1.6版本,我将在稍后更新。

我还发现了net462关于running tests against multiple targets的博文,他们使用了这个:

xUnit

请注意,他们定位的是<PropertyGroup> <TargetFrameworks>net452;netcoreapp1.1</TargetFrameworks> </PropertyGroup> ,而不是netcoreapp