Как вы используете сборки GAC'd в качестве ссылок с csc.exe? - PullRequest
4 голосов
/ 20 мая 2009

Я компилирую из csc.exe (ну, CruiseControl ...), и мне нужно сослаться на DLL в GAC. У меня нет правильной версии этой DLL в виде простого файла, но в GAC есть правильная версия.

Однако вы не можете ссылаться на сборки в GAC с помощью csc - вы должны иметь путь к реальному файлу.

Я нашел несколько ссылок, в которых утверждается, что вы можете перепроектировать путь к реальному файлу, но я не смог заставить их работать. Я запустил ведение журнала Fusion, и я могу видеть, откуда среда выполнения получает файл, но использование пути к файлу в этом месте в моей ссылке не работает.

Итак, как вы предоставляете csc ссылку на версию сборки, которая существует только в GAC?

Ответы [ 3 ]

3 голосов
/ 20 мая 2009

У меня была похожая проблема. Решение, которое я использовал, состояло в том, чтобы открыть командную строку и изменить каталог на что-то вроде следующего (изменить его в зависимости от того, какую сборку вы хотите):

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

Затем вы можете скопировать DLL в этот каталог где-то за пределами GAC.

3 голосов
/ 20 мая 2009

Я бы порекомендовал использовать Nant или MSBuild и просто использовать файл .csproj, сгенерированный Visual Studio. Тогда просто заставьте 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>
0 голосов
/ 20 мая 2009

Когда я компилировал против Excel PIA, я использовал этот путь, чтобы указать ссылку в командной строке для csc.exe: C: \ Windows \ сборка \ GAC \ Microsoft.Office.Interop.Excel \ 11.0.0.0__71e9bce111e9429c \ Microsoft.Office.Interop.Excel.dll

Компиляция прошла успешно.

?? Это не работает для вас?

...