我尝试使用CodeDom
和CompilerParameters
类关注MSDN的example。对于我正在研究的另一个项目,我需要引用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
添加程序集然后它可以工作,但我宁愿不这样做,因为它不会是可扩展的。有没有办法只使用名称添加引用?或者至少动态地获得完整路径?
答案 0 :(得分:1)
这个答案意味着一种解决方法。如果另一个非解决方案的答案出现,我建议你使用这个答案。
您可以通过引用该程序集中的类并获取程序集位置来获取WindowsBase.dll
的绝对路径。例如:
typeof(System.Windows.Threading.Dispatcher).Assembly.Location
从该程序集中选择您想要的任何课程。
通过执行此操作,您将获得WindowsBase.dll的完整路径,而无需将该路径硬编码到代码中。