2011-12-18 10 views
2

特定のディレクトリ(C:\Program Files\NetworkGame3\api\)で実行されているコンソールアプリケーション(NGameHost)があります。それはそのディレクトリで利用可能なファイルを使用し、コンソールアプリケーションは単独で実行するとうまく動作します。また、DLL(および設定ファイルなどの他のファイル)をそのディレクトリから使用するさまざまな方法も公開しています。これらのメソッドを呼び出して結果を返そうとする別のコンソールアプリケーション(別の場所にあります)があります。 Copy Local: Falseを設定して、ローカルバージョンを作成するのではなく、そのディレクトリ内で実行するようにしました。しかし、私は "ファイルまたはアセンブリを読み込めませんでした...またはその依存関係の1つを読み込めませんでした。システムが指定されたファイルを見つけることができません"というエラーが表示されます。別のディレクトリにあるDLLファイルを呼び出す

別のディレクトリにあるコンソールアプリケーションからメソッドを呼び出すにはどうすればよいですか?

+0

あなたはDLLを含むディレクトリへのフルパスを使用する必要があります。プログラムはそれを単独で見つけることができません。既定の検索順序には、ハードディスク上のランダムなディレクトリは含まれません。 –

+0

参照を含めると、プロパティセクションに正しい完全なパスがあります。私はそれがパスを知っているので、それはちょうどそのアセンブリを起動すると私はローカルコピーを使用しないように言ったと思った。 – XSL

+1

コンパイル中にMSBuildがアセンブリをローカルディレクトリにコピーするかどうかだけに影響するHasanの答えは、 'Copy Local'についてです。これは、実行時にアセンブリを配置するアプリケーションとは関係ありません。 –

答えて

3

あなたがいることであると言っているのかローカル= falseをコピーした場合アセンブリをローカルディレクトリにコピーしないでください。この場合、ランタイムがそれを探す場所のいずれかでアセンブリを使用できます。

はあなたのアセンブリがGACにまたは探査場所のいずれかのいずれかである必要がありHow the runtime locates assembly

を参照してください。

+0

はい、あなたはGACを使うことができますが、絶対にそうしなければ何かをGACに置くことを避けることをお勧めします。質問に提示された問題の私の理解から、選択肢があります。あなたはそれらを利用することで最も効果的です。 –

0

私は最近、非常に似たような問題を解決しようとしている私の頭を煉瓦壁に打ち付けています。私は実行時にロードしたいDLLを持っており、それ自身の依存関係があります。なぜ私は負荷がかかっているのか理解できませんでしたが、ロードされたアセンブリでクラスのコンストラクタを呼び出すと、エラーは発生せず、実行は単に停止し、何が起こっているのか疑問に思いました。

ロードされたアセンブリの依存関係が異なる.NETバージョンであり、そのコードに混在モードアセンブリを有効にするApp.Configがあることがわかります。だから私は当然、それを私のコードに持っていなければなりませんでした。別のバージョンの.NETでアセンブリを呼び出すアセンブリを呼び出すときです。

開発中のアプリケーションにすべての従属のDLLをコピーするまで、エラーは表示されませんでした。今、私は再びそれらを削除することができます!その際、DLL Loader Lockの警告メッセージが表示されます。私がそれを抑制するか無視すると、私のコードが動作します。その後、私の場合は

、解像度は:

<?xml version="1.0"?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0"/> 
    </startup> 
</configuration> 
関連する問題