CodeDom 找不到 WindowsBase.dll
CodeDom can't find WindowsBase.dll
我正在尝试按照 MSDN 的 example 使用 CodeDom
和 CompilerParameters
class。对于我正在处理的另一个项目,我需要引用 WindowsBase,所以我只是使用这个示例进行测试。我通过以下代码添加对 WindowsBase.dll
和 System.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 的完整路径,而无需将该路径硬编码到您的代码中。
我正在尝试按照 MSDN 的 example 使用 CodeDom
和 CompilerParameters
class。对于我正在处理的另一个项目,我需要引用 WindowsBase,所以我只是使用这个示例进行测试。我通过以下代码添加对 WindowsBase.dll
和 System.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 的完整路径,而无需将该路径硬编码到您的代码中。