2009-05-19 8 views
4

私はcsc.exeからコンパイルしています(まあ、CruiseControlは...です)、GACでDLLを参照する必要があります。私はこのDLLの正しいバージョンを単純なファイルとして持っていませんが、GACに正しいバージョンがあります。csc.exeでGACのアセンブリを参照としてどのように使用しますか?

しかし、cscを使用してGACでアセンブリを参照することはできません。実際のファイルへのパスが必要です。

私は実際のファイルへのパスをリバースエンジニアリングできると主張するいくつかの参照を見つけましたが、それらを動作させることができませんでした。私はFusionロギングを起動し、ランタイムがどこからファイルを取得しているかを確認できますが、参照内のその場所にファイルパスを使用しても機能しません。

したがって、GACにのみ存在するアセンブリバージョンへの参照をどのようにcscに提供しますか?

答えて

3

私は同様の問題がありました。

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

あなたはその後、GAC外のどこかに、このディレクトリにDLLをコピーすることができます:私が使用した溶液は、(あなたが望むアセンブリかに応じてそれを変更する)次のようにコマンドプロンプトと変更ディレクトリを開くことでした。

+0

はい、それがキーでした - コマンドプロンプトでそのフォルダに移動し、DLLを他のどこかにコピーアウト*しなければなりませんでした。何らかの理由で、そのフォルダパスをCruiseControlのCSCタスクに入れることはできません。しかし、DLLをコピーして(そして権限を変更する)、それをうまく参照することができます。 – Deane

0

私はエクセルPIAの、私はcsc.exeのためのコマンドラインでの参照を指定するには、このパスを使用に対してコンパイル: C:\ WINDOWS \アセンブリ\ GAC \ Microsoft.Office.Interop.Excel \ 11.0.0.0 __71e9bce111e9429c \ Microsoft.Office.Interop.Excel.dll

コンパイルに成功しました。

?? これはうまくいかないのですか?

+0

オフィス相互運用機能のものが例として使用されたので、私は、それは私がこのことについて読んで、あなたのWebサイトだったと思います。 しかし、これは機能しませんでした。私はFusionのログを見て、私のことはちょっと違っていました。それはちょうど "GAC"ではなく "GAC_MSIL"でした。しかし、どちらの経路もどんな速度でも機能しませんでした。 – Deane

+0

これは残念です。再: "どちらの経路も働かなかった"まあ、1つのパスだけが正しいパスです。 DLLが実際にそのパスに存在することを確認しましたか?それはコマンドラインを必要とするでしょう。 CDをMicrosoft.Office.Interop.Excelディレクトリに置いて、それらのすべての番号を含むパスの残りの部分を見つけなければなりません。これは、リリースとマシンによって異なります。パスを確認したら、csc.exe/r:で再試行できますか? – Cheeso

3

NantやMSBuildを使用し、Visual Studioで生成された.csprojファイルを使用することをお勧めします。その後、CruiseControlに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

私はこれをやりたくないのです。なぜなら、複数の開発者が、projファイルの並行処理の問題を開始するからです。それぞれの開発者はそれぞれ独自のprojファイルを持っていますが、それらが異なっている状況やSVNがマージするときにそれらを壊したり、その他の奇妙なことが起こります。私はcscを使ってすべてのソースファイルをコンパイルする方が好きです。 – Deane

+3

私は正直言って、マージ問題を扱うことは、GACからファイルをコピーし、権限で再生するよりも簡単に思えます。結局のところ、ソースファイルのマージとはどのように違うのですか?私たちは現在MSBuildを職場で使用しており、10人程度のチームとprojファイルで作業していますが、煩わしいことはそれほど問題ではありません。 – danswain

関連する問題