为Windows应用商店8.1应用程序创建DLL

时间:2014-07-07 19:52:01

标签: c# .net dll windows-8.1

我正在尝试创建一个用C#编写的DLL,它将使用{8.1}包,例如Windows.StorageWindows.Media。当不包括使用csc.exe包的类时,DLL使用Windows进行编译。

当尝试编译整个DLL(包括额外的类)时,我添加了/r:"C:\Program Files (x86)\Windows Kits\8.1\References\CommonConfiguration\Neutral\Windows.winmd"编译器选项以包含缺少的Windows包。编译器然后抛出此错误:

  

c:\ Program Files(x86)\ Windows Kits \ 8.1 \ References \ CommonConfiguration \ Neutral \ Windows.winmd:error CS0012:类型'System.Attribute'在           未引用的程序集。您必须添加对程序集的引用           'System.Runtime,Version = 4.0.0.0,Culture = neutral,           公钥= b03f5f7f11d50a3a”。

但是,当我尝试包含C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.dll时,编译器几乎为我使用的每个类error CS0433提供了The type '...' exists in both '...\mscorlib.dll' and '...\Runtime.dll'

有没有办法只包含Runtime.dll中必需的包?或者是否有一种完全不同的方式来轻松编译这个DLL?

1 个答案:

答案 0 :(得分:0)

要解决此问题,请添加对System.Runtime.dll外观的引用。通常,此外观位于System.Attribute

这里的根本问题是不同的.NET实现在不同的程序集上定义System.Attribute类型。但是,.NET / Windows类型的投影层 - 使Windows运行时类型的粘合剂看起来像普通的.NET类型 - 并且编译器期望在System.Runtime.dll中定义System.Attribute。对于某些.NET实现来说,情况确实如此,但对于Windows附带的内置.NET Framework则不然。

上面引用的Facade提供了一个指向编译器的指针,windowid的实现实际上在System.dll中用于此实现。