CodeDom 找不到 WindowsBase.dll

CodeDom can't find WindowsBase.dll

我正在尝试按照 MSDN 的 example 使用 CodeDomCompilerParameters class。对于我正在处理的另一个项目,我需要引用 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 添加程序集,那么它可以工作,但我不想这样做,因为那样它就无法扩展。有没有一种方法可以仅使用名称来添加引用?或者至少动态获取完整路径?

此答案旨在作为解决方法。如果出现另一个非解决方法的答案,我鼓励您使用那个而不是这个。

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

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

从该程序集中选择任何 class。

通过这样做,您将获得 WindowsBase.dll 的完整路径,而无需将该路径硬编码到您的代码中。