Domanda

Sto compilando da csc.exe (beh, CruiseControl è...) e devo fare riferimento a una DLL nel GAC.Non ho la versione corretta di questa DLL come semplice file, ma esiste una versione corretta nel GAC.

Tuttavia, non puoi fare riferimento agli assembly nel GAC con csc: devi avere il percorso del file effettivo.

Ho trovato alcuni riferimenti che affermano che è possibile decodificare il percorso del file effettivo, ma non sono riuscito a farli funzionare.Ho avviato la registrazione di Fusion e posso vedere da dove il runtime ottiene il file, ma l'utilizzo di un percorso file per quella posizione nel mio riferimento non funziona.

Quindi, come si fornisce a csc un riferimento a una versione dell'assembly che esiste solo nel GAC?

È stato utile?

Soluzione

Ho avuto un problema simile.La soluzione che ho usato è stata quella di aprire un prompt dei comandi e cambiare la directory in qualcosa di simile alla seguente (cambiala a seconda dell'assembly che desideri):

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

È quindi possibile copiare la DLL in questa directory da qualche parte all'esterno del GAC.

Altri suggerimenti

Consiglierei di utilizzare Nant o MSBuild e di utilizzare semplicemente il file .csproj generato da Visual Studio.Quindi fai semplicemente in modo che CruiseControl utilizzi il tuo script Nant.Di seguito è riportato un estratto da uno script Nant che ho scritto,

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

e i riferimenti

      <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>

Quando ho compilato rispetto agli PIA di Excel, ho utilizzato questo percorso per specificare un riferimento sulla riga di comando per csc.exe:C:\windows\assembly\GAC\Microsoft.Office.Interop.Excel\11.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll

La compilazione è riuscita.

??Questo non funziona per te?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top