5

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

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

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

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

4

3 回答 3

3

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

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

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

于 2009-05-19T21:27:11.113 回答
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>
于 2009-05-19T21:30:09.063 回答
0

当我针对 Excel PIA 进行编译时,我使用此路径在命令行上为 csc.exe 指定引用:C:\windows\assembly\GAC\Microsoft.Office.Interop.Excel\11.0.0.0__71e9bce111e9429c\Microsoft.Office .Interop.Excel.dll

编译成功。

?? 这对你不起作用吗?

于 2009-05-19T21:16:41.603 回答