2009-05-19 4 views
4

Ich kompiliere von csc.exe (nun, CruiseControl ist ...), und ich muss eine DLL in der GAC verweisen. Ich habe nicht die korrekte Version dieser DLL als eine einfache Datei, aber es gibt eine korrekte Version in der GAC.Wie verwenden Sie GAC-Baugruppen als Referenzen mit csc.exe?

Sie können jedoch keine Assemblys im GAC mit csc referenzieren - Sie müssen den Pfad zur eigentlichen Datei haben.

Ich habe einige Referenzen gefunden, die behaupten, dass Sie den Pfad zur eigentlichen Datei zurückentwickeln können, aber ich konnte sie nicht arbeiten lassen. Ich habe die Fusion-Protokollierung gestartet, und ich kann sehen, woher die Laufzeit die Datei bezieht, aber die Verwendung eines Dateipfads zu dieser Position in meiner Referenz funktioniert nicht.

Also, wie bieten Sie csc mit einem Verweis auf eine Assembly-Version, die nur in der GAC vorhanden ist?

Antwort

3

Ich hatte ein ähnliches Problem. Die Lösung, die ich verwendet wurde, war eine Eingabeaufforderung und wechseln Sie in etwa wie folgt zu öffnen (es, auf das ändern, je nach Montage Sie mögen):

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

Anschließend können Sie die DLL in diesem Verzeichnis irgendwo außerhalb des GAC kopieren.

+0

Ja, das war der Schlüssel - ich musste an einer Eingabeaufforderung zu diesem Ordner navigieren, dann * kopiere die DLL an einen anderen Ort *. Sie können diesen Ordnerpfad aus irgendeinem Grund nicht in eine CSC-Task in CruiseControl einfügen. Aber wenn Sie die DLL kopieren (und Berechtigungen ändern), können Sie einfach darauf verweisen. – Deane

0

Wenn I zusammengestellt gegen den Excel-PIAs, habe ich diesen Weg eine Referenz in der Befehlszeile für csc.exe angeben: C: \ windows \ assembly \ GAC \ Microsoft.Office.Interop.Excel \ 11.0.0.0 __71e9bce111e9429c \ Microsoft.Office.Interop.Excel.dll

Die Kompilierung war erfolgreich.

?? Funktioniert das nicht für Sie?

+0

Ich denke, es ist Ihre Website, wo ich darüber gelesen, weil das Zeug Office-Interop als Beispiel verwendet wurde . Aber nein - das hat nicht funktioniert. Ich schaute auf das Fusion-Protokoll, und meins war ein bisschen anders: es war "GAC_MSIL" und nicht nur "GAC". Aber jedenfalls funktionierte keiner der Wege. – Deane

+0

Das ist enttäuschend. zu: "keiner der Wege hat funktioniert." Nun, nur ein Pfad ist der richtige Pfad. Haben Sie überprüft, dass die DLL tatsächlich in diesem Pfad vorhanden ist? Es würde eine Befehlszeile erfordern, denke ich. Sie müssten CD in das Microsoft.Office.Interop.Excel-Verzeichnis kopieren und dann den Rest des Pfades einschließlich all dieser Nummern finden, die ich nach Release und Maschine variieren kann. Nachdem Sie den Pfad überprüft haben, können Sie es erneut mit csc.exe/r versuchen: ? – Cheeso

3

Ich würde die Verwendung von Nant oder MSBuild empfehlen und einfach die von Visual Studio erzeugte .csproj-Datei verwenden. Dann rufen Sie einfach CruiseControl, um Ihr Nant-Skript zu verwenden. Im Folgenden ein Auszug aus einem Skript Nant I,

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

und die Referenzen

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

Ich mag das nicht, weil Sie mit mehreren Entwicklern anfangen, Probleme mit Parallelitätsproblemen bei Projekten zu lösen. Jeder Entwickler hat seine eigene proj-Datei, und Sie bekommen Situationen, in denen sie anders sind, und SVN verschraubt sie, wenn es verschmilzt, und andere Seltsamkeit. Ich würde es vorziehen, nur alle Quelldateien mit csc zu kompilieren. – Deane

+3

Ich stimme respektvoll zu, der Umgang mit Merge-Problemen scheint einfacher als das Kopieren von Dateien aus dem GAC und das Spielen mit Berechtigungen. Wie unterscheidet es sich vom Zusammenführen von Quelldateien?Wir benutzen MSBuild jetzt bei der Arbeit und arbeiten in Teams von 10 oder so und proj-Dateien, während lästig sind nicht so viel ein Problem. – danswain