在.net framework 4.6.2 consoleapps中使用.net标准时遇到了一些问题。
我可以将问题减少到这个: 给出:
我使用此单一类创建.net标准1.5客户端库vs 2017;
public class Class1
{
public List<int> Get()
{
return new List<int>() { 1, 2, 3, 4, 5, 65, 6 };
}
}
现在我创建一个新的.net 4.6.2控制台应用程序,它只调用此类的方法:
static void Main(string[] args)
{
var foo = new Class1();
Console.WriteLine("Done!");
Console.ReadLine();
}
现在我
System.IO.FileNotFoundException:'文件或程序集 “System.Runtime,Version = 4.1.0.0,Culture = neutral, 未找到PublicKeyToken = b03f5f7f11d50a3a
当我将.net standardlib nuget包添加到.net fx控制台时,它可以工作。但是那时system.runtime可以通过GAC和nuget参考来实现,这对我来说似乎很难看。
我在这里推出了这个简短的测试解决方案:https://github.com/Gentlehag/NetStandardSample
我错过了什么?
答案 0 :(得分:9)
我添加了repo,告诉您如何执行此操作。来自README.md:
要求
一般来说,在应用程序中使用面向.NET Standard的库 以.NET Framework为目标,要求应用程序项目包含NuGet .NET Standard(
NETStandard.Library
)的参考。这确保了正确的 应用程序中包含一组程序集。在Visual Studio 2015中,从.NET使用NuGet包的默认方式 框架项目是通过
packages.config
。我不推荐这条路 这意味着所有组件都直接注入应用程序 项目,这将显着膨胀您的项目文件。相反,我建议 你使用project.json
。为此,请执行以下步骤:
- 卸载所有软件包(如果您仍然使用
packages.config
)- 删除空的
packages.config
- 醇>
使用以下内容添加
project.json
文件:
json { "dependencies": { "NETStandard.Library": "1.6.0" }, "runtimes": { "win": {} }, "frameworks": { "net462": {} } }
请注意,您通常可以依赖于最新版本
NETStandard.Library
包,但您需要确保保留框架 绰号与您的应用程序所针对的.NET Framework版本同步,即 当您定位.NET Framework 4.6.1时,您需要确保使用 而是net461
。这感觉很笨拙
是的。我们正计划以两种方式解决这个问题:
我们在Visual中使用基于MSBuild的解决方案替换
project.json
2017年工作室。您仍然需要添加对NETStandard.Library
的引用,但是 你不再需要弄乱包裹的方式也没有 必须手动保持目标信息同步。我们计划更新.NET Framework,以便它的未来版本随附 内置支持.NET Standard,在这种情况下将不再引用 需要。
答案 1 :(得分:0)
我发现添加NETStandard.Library
对我来说不起作用,但确保在构建时生成绑定重定向就行了。为此你应该确保你有
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
</PropertyGroup>
项目文件中的某个位置。这适用于控制台或Web应用程序。如果您在运行单元测试时遇到问题,可以使用:
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
GenerateBindingRedirectsOutputType
是必要的,因为单元测试包含在默认情况下没有可执行输出的类库中,因此这会强制将任何重定向配置写入构建工件,准备好在测试执行时使用。
您可以在此处找到有关问题的更多详细信息:https://github.com/dotnet/announcements/issues/31