CodeDom无法找到WindowsBase.dll

时间:2017-11-22 20:10:46

标签: c# codedom

我尝试使用CodeDomCompilerParameters类关注MSDN的example。对于我正在研究的另一个项目,我需要引用WindowsBase,所以我只是使用这个例子进行测试。我通过以下代码添加了对WindowsBase.dllSystem.dll的引用:

cp.ReferencedAssemblies.Add("System.dll");
cp.ReferencedAssemblies.Add("WindowsBase.dll");

然而,当我编译它时,我收到错误CS0006: Metadata file 'WindowsBase.dll' could not be found

为什么它适用于System.dll而不适用于WindowsBase.dll?

我在网上其他地方搜索过,他们认为问题出在GAC上。我对GAC不太熟悉,但我已经检查了以下目录,

C:\Windows\assembly
C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\WindowsBase\v4.0_4.0.0.0__31bf3856ad364e35

我可以看到WindowBase.dll就在那里。如果我通过完整路径C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\WindowsBase\v4.0_4.0.0.0__31bf3856ad364e35\WindowsBase.dll添加程序集然后它可以工作,但我宁愿不这样做,因为它不会是可扩展的。有没有办法只使用名称添加引用?或者至少动态地获得完整路径?

1 个答案:

答案 0 :(得分:1)

这个答案意味着一种解决方法。如果另一个非解决方案的答案出现,我建议你使用这个答案。

您可以通过引用该程序集中的类并获取程序集位置来获取WindowsBase.dll的绝对路径。例如:

typeof(System.Windows.Threading.Dispatcher).Assembly.Location

从该程序集中选择您想要的任何课程。

通过执行此操作,您将获得WindowsBase.dll的完整路径,而无需将该路径硬编码到代码中。