Ayb*_*btu 5 .net c# frameworks .net-framework-version .net-standard
我正在尝试让.Net Framework和NetStandard程序集相互通信(以了解可能的内容).我目前有四个项目,两个Framework 4.5.2项目和两个NetStandard1.2项目:
Framework452.LibraryNetStandard12.CentralLibraryNetStandard12.BaseLibraryFramework452.Tests引用结构是:
Framework452.Tests参考NetStandard12.CentralLibrary:通过添加NetStandard.Library nuget包来工作Framework452.Tests.NetStandard12.CentralLibrary参考NetStandard12.BaseLibrary:无需修改即可工作.NetStandard12.CentralLibrary参考Framework452.Library:不工作,即使Framework452.Library安装了NetStandard.Library nuget包.NetStandard项目可以参考Framework项目吗?如果是这样,我需要做些什么才能让他们进行沟通?目前我可以添加引用,但代码不可见.
更新
我重新创建了解决方案并添加了下面的代码,当我尝试编译时,从Framework452.Tests项目中给出以下错误:
错误CS0006:找不到元数据文件'〜\ TryNETStandard\NetStandard12.CentralLibrary\bin\Debug \netstandard1.2\NetStandard12.CentralLibrary.dll'.
namespace Framework452.Library
{
public class Returner452 {
public static bool ReturnTrue() { return true; }
}
}
using Xunit;
namespace Framework452.Tests
{
public class Class1 {
[Fact]
public void FrameworkTest() {
Assert.True(NetStandard12.CentralLibrary.Class1.Return452());
}
[Fact]
public void NetStandardTest() {
Assert.True(NetStandard12.CentralLibrary.Class1.Return12());
}
}
}
namespace NetStandard12.BaseLibrary
{
public class Returner12 {
public static bool ReturnTrue() { return true; }
}
}
using Framework452.Library;
using NetStandard12.BaseLibrary;
namespace NetStandard12.CentralLibrary
{
public class Class1
{
public static bool Return452() { return Returner452.ReturnTrue(); }
public static bool Return12() { return Returner12.ReturnTrue(); }
}
}
Run Code Online (Sandbox Code Playgroud)
不,.NET Standard项目不能引用框架项目.
.NET标准项目需要跨平台可用,通过引用以它为目标的程序集来强制依赖.NET框架使这变得不可能.
请注意,微软正在使用.NET Standard 2.0的一些神奇功能,这不太正确,但总体思路仍然存在.
根据此页面https://docs.microsoft.com/en-us/dotnet/standard/net-standard#net-platforms-support,您应该能够实现您的目的,因为.NET Standard 1.2支持.NET Framework 4.5. 1(更新:此声明不是100%正确.请参阅下面的更新部分.)
我尝试在VS 2017中设置解决方案并按照您的描述设置参考.这是结果.
这是Class1.cs在NetStandard12.CentralLibrary
代码编译正常,没有任何错误.
注意:如果Framework452.Library使用.NET Standard 1.2不支持的API(例如Winforms,Win32 API或任何对跨平台没有意义的Microsoft专有库),您的代码可能会失败.
我从MSFT https://www.youtube.com/watch?v=YI4MurjfMn8&list=PLRAdsfhKI4OWx321A_pr-7HhRNk7wOLLY之一的.NET标准介绍中推荐这个youtube播放列表
在.NET Standard - Checking Compatibilty中,他推荐了一些工具来帮助您找出.NET标准中不支持的API.
.NET Standard 2.0和'compat shim'将使事情变得更容易
更新:
在使用该问题提供的更多数据再次尝试之后,确定目标(依赖).NET Standard的库不能依赖于以.NET Framework为目标的库.由于一些奇怪的原因,编译器允许我编译我上面给出的示例.这可能是工具中的一个错误.
经过一番研究,我发现了一个很好的例子,展示了NetStandard和NetFramework之间的关系:.NET Standard如何与.NET平台相关.此处的图表显示了依赖关系
根据图表,依赖于.NET Standard的库无法看到/使用.NET框架实现.
当.NET Standard 2发布时,这可能会有所改变,您可以通过Compatibility Shim引用.NET Framework.有关更深入的说明,请参阅此视频https://youtu.be/vg6nR7hS2lI?list=PLRAdsfhKI4OWx321A_pr-7HhRNk7wOLLY&t=169
| 归档时间: |
|
| 查看次数: |
3503 次 |
| 最近记录: |