【发布时间】:2017-01-21 11:14:55
【问题描述】:
我开发了一个简单的 .net 标准库。
然后我在 .net 4.6 项目中引用了这个程序集,它基本上可以正常工作。
但是当我尝试使用 bool(或 Guid)参数调用此 .net 标准库中的方法时,我收到此错误:
无法转换源类型 'bool [mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]' 到目标类型 'bool [System.Runtime,版本=4.1.0.0,文化=中性, PublicKeyToken=b03f5f7f11d50a3a]'
这些类型在两个程序集中定义:mscorlib 和 System.Runtime...我该如何解决这个问题?
更新
这里有一个非常简单的例子来显示这个错误:
.net Portable Library --> 通过属性选项卡转换为 .NET Standard
public class MyClass
{
public void CallMe(Guid guid)
{
//so something
}
}
Project.json
{
"supports": {},
"dependencies": {
"Microsoft.NETCore.Portable.Compatibility": "1.0.1",
"NETStandard.Library": "1.6.0"
},
"frameworks": {
"netstandard1.6": {}
}
}
我还必须将它添加到我的 csproj-File 中,否则它根本不起作用:
<PropertyGroup>
<NuGetTargetMoniker>.NETStandard,Version=v1.6</NuGetTargetMoniker>
</PropertyGroup>
net 4.6.1 项目(通过 dll 文件直接引用 .net 标准库(项目引用不起作用)
public class Class1
{
private void Call()
{
var c = new MyClass();
c.CallMe(Guid.NewGuid());
}
}
【问题讨论】:
-
你能给一个minimal reproducible example,包括你的项目文件,如果它仍然是project.json?当您说“.net 4.6 项目”时,您是指 .NET 4.6、4.6.1 还是 4.6.2?这是一个 .NET Core 风格的项目,还是一个常规的 csproj?基本上这里有很多细节在起作用——了解它们真的很有帮助。
-
我添加了一个简单的例子来显示这个错误
-
您的目标是来自 .NET 4.6.1 项目的 netstandard1.6 库 - 这不应该工作 - 请参阅 docs.microsoft.com/en-us/dotnet/articles/standard/library。相反,请尝试以 netstandard1.4 为目标。
-
我还怀疑直接添加对 DLL 的引用是个坏主意。我相信可能需要程序集绑定重定向。基本上,现在很难将 csproj 项目的引用添加到 project.json 项目 - 它应该全部在新工具中进行排序。
-
好的,谢谢乔恩!这解决了我的简单示例。但是在我的真实项目中,我还有其他需要 .NET Standard 1.5 或更高版本的依赖项......我想我必须为此找到另一个解决方案。但无论如何 - 再次感谢!
标签: .net mscorlib .net-standard