2009-05-19 5 views
4

Je compile à partir de csc.exe (bien, CruiseControl est ...), et j'ai besoin de faire référence à une DLL dans le GAC. Je n'ai pas la version correcte de cette DLL en tant que fichier simple, mais il existe une version correcte dans le GAC. Cependant, vous ne pouvez pas référencer les assemblages dans le GAC avec csc - vous devez avoir le chemin vers le fichier actuel.Comment utilisez-vous les assemblys GAC comme références avec csc.exe?

J'ai trouvé quelques références qui prétendent que vous pouvez désosser le chemin vers le fichier réel, mais je n'ai pas réussi à les faire fonctionner. J'ai démarré la journalisation Fusion, et je peux voir d'où provient le fichier d'exécution, mais l'utilisation d'un chemin de fichier vers cet emplacement dans ma référence ne fonctionne pas. Alors, comment fournissez-vous à csc une référence à une version d'assemblage qui n'existe que dans le GAC?

Répondre

3

J'ai eu un problème similaire. La solution j'était d'ouvrir une invite de commande et changer le répertoire à quelque chose comme ce qui suit (changer en fonction de l'assemblage que vous voulez):

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

Vous pouvez ensuite copier la DLL dans ce répertoire quelque part en dehors du GAC.

+0

Oui, c'était la clé - je devais naviguer vers ce dossier à une invite de commande, puis * copier la DLL vers un autre endroit *. Vous ne pouvez pas mettre ce chemin de dossier dans une tâche CSC dans CruiseControl pour une raison quelconque. Mais si vous copiez la DLL (et modifiez les permissions), vous pouvez la référencer très bien. – Deane

0

Lorsque j'ai compilé avec les PIA Excel, j'ai utilisé ce chemin pour spécifier une référence sur la ligne de commande pour csc.exe: C: \ windows \ assembly \ GAC \ Microsoft.Office.Interop.Excel \ 11.0.0.0 __71e9bce111e9429c \ Microsoft.Office.Interop.Excel.dll

La compilation a réussi.

?? Est-ce que cela ne fonctionne pas pour vous?

+0

Je pense que c'était votre site Web où je lis à ce sujet, parce que les choses Bureau Interop a été utilisé comme un exemple . Mais, non - cela n'a pas fonctionné. J'ai regardé le journal Fusion, et le mien était un peu différent: c'était "GAC_MSIL" plutôt que juste "GAC". Mais, aucun chemin n'a fonctionné, en tout cas. – Deane

+0

C'est décevant. re: "ni chemin travaillé". Eh bien, un seul chemin est le bon chemin. Avez-vous vérifié que la DLL existe réellement à ce chemin? Cela nécessiterait une ligne de commande, je suppose. Vous devrez CD dans le répertoire Microsoft.Office.Interop.Excel et ensuite trouver le reste du chemin, y compris tous les numéros, qui varient selon les versions et les machines. Une fois que vous avez vérifié le chemin, pouvez-vous réessayer avec csc.exe/r: ? – Cheeso

3

Je vous recommande d'utiliser Nant ou MSBuild et il suffit d'utiliser le fichier .csproj généré par visual studio. Ensuite, obtenez simplement CruiseControl pour utiliser votre script Nant. Ci-dessous un extrait d'un script Nant je l'ai écrit,

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

et les références

 <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

Je n'aime pas faire cela parce que, avec plusieurs développeurs, vous commencez à rencontrer des problèmes de concurrence de fichiers proj. Chaque développeur a son propre fichier proj, et vous obtenez des situations où ils sont différents, et SVN les vissera quand ils fusionneront, et d'autres bizarreries. Je préférerais juste compiler tous les fichiers sources avec csc. – Deane

+3

Je suis respectueusement en désaccord, traiter des problèmes de fusion semble plus facile que de copier des fichiers sur le GAC et de jouer avec les permissions. Après tout, en quoi est-ce différent de la fusion des fichiers source.Nous utilisons maintenant MSBuild au travail et travaillons en équipes d'une dizaine de personnes, et les fichiers de proj, bien que gênants, ne sont pas vraiment un problème. – danswain

Questions connexes