我创建了一个.NET Standard
库,其中包含将在.NET Framework
个应用和.NET Core
个应用之间共享的模型。
我有enum
使用DescriptionAttribute
。这是.NET Standard 1.5
库中的枚举:
using System.ComponentModel;
public enum Foo
{
[Description("Description A")]
A,
[Description("Description B")]
B
}
为了能够使用DescriptionAttribute
,我添加了System.ComponentModel.Primitives
形成NuGet包。
现在在我的.NET Framework应用程序中,我想检索枚举的描述。
获取enum
说明的实现在.NET Core
和.NET Framework
之间有所不同。因此,在我的.NET Framework 4.6.2
应用中,我有一个扩展名GetDescription
,可以解析enum
的描述属性并将其返回:
public static string GetDescription(this Enum value)
{
Type type = value.GetType();
string name = Enum.GetName(type, value);
if (name != null)
{
FieldInfo field = type.GetField(name);
if (field != null)
{
DescriptionAttribute attr =
Attribute.GetCustomAttribute(field,
typeof(DescriptionAttribute)) as DescriptionAttribute;
if (attr != null)
{
return attr.Description;
}
}
}
return null;
}
我收到了这个错误:
System.IO.FileNotFoundException:'无法加载文件或程序集'System.ComponentModel.Primitives,Version = 4.1.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。系统找不到指定的文件。'
我尝试添加System.ComponentModel.Primitives
,但仍然有错误。
修改
这是我项目的结构:
答案 0 :(得分:2)
要获取加载.NET Standard< = 1.6库所需的完整程序集,您应该安装NETStandard.Library
NuGet程序包以及库引用的任何其他程序包(如果使用packages.config
基于.NET Framework项目。
在某些情况下,可以通过告诉msbuild在构建期间更新构建程序集的.config
文件来修复类似的错误,以通过在csproj文件中添加以下代码段来包含绑定重定向。当库引用.NET Standard项目并由托管应用程序加载时,通常需要这样做。 (例如经典单元测试项目):
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
但是,在您的情况下(.NET Framework控制台应用程序引用.NET标准库)如果您安装所有需要的NuGet包,则不需要这样做。您的app.config
文件应自动包含必要的重定向。
请注意,在VS 2017 15.3中,这将会发生变化,您不再需要引用NuGet包来将必要的兼容性库添加到构建输出中。