7

コンパイル時に実行可能なバイナリを吐き出す C# ソリューションがあります。バイナリは、私が作成した別のソリューションの製品であるライブラリに依存しています。すべてのコードは、私が作成したものです。

最近、私はいくつかのプロジェクト設定をかなりでたらめにいじり、CLR によるリンクの構築がどのように機能するかを感じようとしました。残念ながら (予想どおり?) バイナリのリンクを切断することはできましたが、問題を解決する方法がわかりません。

  • バイナリを使用すると、アプリケーションがフォールオーバーする前に次のフィードバックを受け取ります

アセンブリを読み込んでいます....アセンブリ MY.Library に型を追加できませんでした、バージョン = 1.0.0.0、カルチャ = ニュートラル、PublicKeyToken = null - 要求された型の 1 つ以上を読み込めません。詳細については、LoaderExceptions プロパティを取得してください

  • MY.Library.resources DLL の Fusion ログは以下のとおりです。上記のバイナリは存在せず、どこで、なぜロードしようとしているのかわかりません。

>

All probing URLs attempted and failed

*** Assembly Binder Log Entry  (22/04/2011 @ 10:34:17) ***

The operation failed. Bind result: hr
= 0x80070002. The system cannot find the file specified.

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll Running under executable  G:\SVN\dev\Debug\MYExecutable.exe
--- A detailed error log follows. 

=== Pre-bind state information === LOG: User = UBERIT\gavina LOG: DisplayName = MY.Library.resources, Version=1.0.0.0, Culture=en, PublicKeyToken=null  (Fully-specified) LOG: Appbase = file:///G:/SVN/dev/Debug LOG: Initial PrivatePath = x64 LOG: Dynamic Base = NULL LOG: Cache Base = NULL LOG: AppName = MYExecutable.exe Calling assembly : MY.Library, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
=== LOG: This bind starts in default load context. 
LOG: Using application configuration file: G:\BuildSVN\apps\ExecSys\MYExecutable\dev\Debug\MYExecutable.exe.Config LOG: Using host configuration file:  LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config. 
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind). LOG: Attempting download of new URL file:///G:/SVN/dev/Debug/en/MY.Library.resources.DLL. 
LOG: Attempting download of new URL file:///G:/SVN/dev/Debug/en/MY.Library.resources/MY.Library.resources.DLL. 
LOG: Attempting download of new URL file:///G:/SVN/dev/Debug/x64/en/MY.Library.resources.DLL. 
LOG: Attempting download of new URL file:///G:/SVN/dev/Debug/x64/en/MY.Library.resources/MY.Library.resources.DLL. 
LOG: Attempting download of new URL file:///G:/SVN/dev/Debug/en/MY.Library.resources.EXE. LOG: Attempting download of new URL file:///G:/SVN/dev/Debug/en/MY.Library.resources/MY.Library.resources.EXE. 
LOG: Attempting download of new URL file:///G:/SVN/dev/Debug/x64/en/MY.Library.resources.EXE. 
LOG: Attempting download of new URL file:///G:/SVN/dev/Debug/x64/en/MY.Library.resources/MY.Library.resources.EXE. 
LOG: All probing URLs attempted and failed.
  • 「リソース」DLL は暗黙的ですか? それとも、必ずこの DLL への参照を持っているのでしょうか? SLN でライブラリの参照を見つけるにはどうすればよいですか?

TL;DR

  • 存在しないリソース DLL への参照を削除するにはどうすればよいですか?
4

3 に答える 3

3
  • 「リソース」DLL は暗黙的ですか? それとも、必ずこの DLL への参照を持っているのでしょうか? ライブラリの SLN で参照を見つけるにはどうすればよいですか?
  • 存在しないリソース DLL への参照を削除するにはどうすればよいですか?

リソースは実際には dll に埋め込まれています。参照する必要はありません。
「library.resouce」が表示される理由は、コードがapp.configまたはAppDomain.AssemblyResolveイベントのいずれかを介して、アセンブリを手動でロードするように .net に要求するためです。

あなたの場合は後者だと思います。そのイベント ハンドラーを見つけて、次のようにします。

static System::Reflection::Assembly^ HandleAssemblyResolveEvent(System::Object^ sender, System::ResolveEventArgs^ args)
{
    System::String^ assemblyName = args->Name->Substring(0, args->Name->IndexOf(","));
    if(assemblyName->EndsWith(".resources")) return nullptr;
}

コードは C++\CLI にありますが、C# に簡単に変換できます。

于 2011-12-13T00:16:47.843 に答える
1

私はちょうどそのような問題を抱えていました、ビジュアルスタジオ2010はxaml.resources.dllやpresentationcore.resources.dllのようなすべての種類のリソースdllを見つけることができませんでした。(結局)それは私がMainWindow.xamlをサブフォルダーに移動した結果であることがわかりました。Windowsフォームでも同じかどうかはわかりませんが、WPFを実行している人には:MainWindow.xamlを移動しないでください。私の人生の別の日は無駄になりました。

于 2011-09-19T12:56:01.647 に答える
0

通常、参照する DLL はReferencesC# プロジェクトのフォルダーにある必要があります (そこから外部 DLL も追加する必要があります)。キックアウトしたい DLL を右クリックして をクリックしますRemove

于 2011-04-22T13:29:13.203 に答える