如何使用GAC程序集作为csc.exe的引用?

时间:2009-05-19 21:09:26

标签: c# reference csc

我正在从csc.exe编译(好吧,CruiseControl是......),我需要在GAC中引用一个DLL。我没有将此DLL的正确版本作为简单文件,但GAC中有正确的版本。

但是,您无法使用csc引用GAC中的程序集 - 您必须具有实际文件的路径。

我发现一些引用声称可以对实际文件的路径进行反向工程,但我无法让它们工作。我启动了Fusion日志记录,我可以看到运行时从哪里获取文件,但在我的引用中使用文件路径到该位置不起作用。

那么,您如何为csc提供仅存在于GAC中的程序集版本的引用?

3 个答案:

答案 0 :(得分:3)

我有类似的问题。我使用的解决方案是打开命令提示符并将目录更改为以下内容(根据您想要的程序集更改它):

C:\WINDOWS\assembly\GAC_MSIL\System.Web.Extensions\3.5.0.0__31bf3856ad364e35\

然后,您可以将此目录中的DLL复制到GAC之外的某个位置。

答案 1 :(得分:3)

我建议使用Nant或MSBuild,只使用visual studio生成的.csproj文件。然后只需让CruiseControl使用你的Nant脚本。以下是我写的Nant脚本的摘录

<csc target="library" output="${basedir}/bin/${basename}.dll" debug="${debug}" optimize="true">
  <sources>
    <include name="src/app/**/*.cs"/>
  </sources>
  <references refid="My.Assemblies" />
</csc>

和参考文献

      <assemblyfileset id="My.Assemblies"><include name="System.dll"></include>
    <include name="System.Configuration.dll"></include>
    <include name="System.Core.dll"></include>
    <include name="System.Data.dll"></include>
    <include name="System.Data.DataSetExtensions.dll"></include>
    <include name="System.Drawing.dll"></include>
    <include name="System.EnterpriseServices.dll"></include>
    <include name="System.Web.dll"></include>
    <include name="System.Web.Extensions.dll"></include>
    <include name="System.Web.Mobile.dll"></include>
    <include name="System.Web.Services.dll"></include>
    <include name="System.Xml.dll"></include>
    <include name="System.Linq.dll"></include>
</assemblyfileset>

答案 2 :(得分:0)

当我针对Excel PIA编译时,我使用此路径在csc.exe的命令行上指定了一个引用: C:\ Windows \组件\ GAC \的Microsoft.Office.Interop.Excel \ 11.0.0.0__71e9bce111e9429c \ Microsoft.Office.Interop.Excel.dll

编译成功。

?? 这不适合你吗?