Boa*_*ler 8 .net c# visual-studio-2017 .net-standard .net-standard-1.5
在.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 };
}
}
Run Code Online (Sandbox Code Playgroud)
现在我创建一个新的.net 4.6.2控制台应用程序,它只是调用此类的方法:
static void Main(string[] args)
{
var foo = new Class1();
Console.WriteLine("Done!");
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
现在我明白了
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
我错过了什么?
我添加了一个回购,告诉你如何做到这一点.从README.md:
要求
一般来说,在面向.NET Framework的应用程序中使用面向.NET Standard的库需要应用程序项目包含.NET Standard(
NETStandard.Library
)的NuGet引用.这可确保应用程序中包含正确的程序集.在Visual Studio 2015中,从.NET Framework项目中使用NuGet包的默认方式是via
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
.这感觉很笨拙
是的.我们计划以两种方式解决这个问题:
我们将
project.json
在Visual Studio 2017中替换为基于MSBuild的解决方案.您仍然需要添加引用NETStandard.Library
,但您不再需要处理包的表示方式,也不必手动保持目标信息同步.我们计划更新.NET Framework,以便它的未来版本内置支持.NET Standard,在这种情况下将不再需要引用.
归档时间: |
|
查看次数: |
4202 次 |
最近记录: |