我正在从csc.exe编译(好吧,CruiseControl是......),我需要在GAC中引用一个DLL。我没有将此DLL的正确版本作为简单文件,但GAC中有正确的版本。
但是,您无法使用csc引用GAC中的程序集 - 您必须具有实际文件的路径。
我发现一些引用声称可以对实际文件的路径进行反向工程,但我无法让它们工作。我启动了Fusion日志记录,我可以看到运行时从哪里获取文件,但在我的引用中使用文件路径到该位置不起作用。
那么,您如何为csc提供仅存在于GAC中的程序集版本的引用?
答案 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
编译成功。
?? 这不适合你吗?