csharptest.net が提供するEXE ファイルにサテライト アセンブリを埋め込む方法のコードを使用して、カスタム アセンブリ リゾルバーを作成し、リソースにアセンブリを埋め込みました。
で使用されているアセンブリを正常に解決できますが、どういうわけか AppDomain.CurrentDomain.AssemblyResolve は「AppName.resources」と呼ばれるアセンブリ、具体的には「MyProgram.resources、Version = 0.15.3992.31638、Culture = en-US、PublicKeyToken = null」を要求します。解決方法がわからない?
リソースからのカスタム アセンブリの読み込みを無効にして (すべてのアセンブリ dll をプログラム ディレクトリに配置)、AppDomain.CurrentDomain.AssemblyResolve を有効にしようとしましたが、まだ要求されていました。
私はこれについて少し混乱しています。これについて私を助けてくれれば、大いに感謝します。
これが興味のある人のための私のコードです。
static Assembly ResolveAssemblies(object sender, ResolveEventArgs args)
{
Assembly assembly = null;
string name = args.Name.Substring(0, args.Name.IndexOf(','));
if (name == "MyProgram.resources") return null;
else name = string.Format("MyProgram.Resources.Assemblies.{0}.dll", name);
lock (_loadedAssemblies)
{
if (!_loadedAssemblies.TryGetValue(name, out assembly))
{
using (Stream io = Assembly.GetExecutingAssembly().GetManifestResourceStream(name))
{
if (io == null)
{
MessageBox.Show("MyProgram can not load one of it's dependencies. Please re-install the program", string.Format("Missing Assembly: {0}", name), MessageBoxButtons.OK, MessageBoxIcon.Error);
Environment.Exit(-1);
}
using (BinaryReader binaryReader = new BinaryReader(io))
{
assembly = Assembly.Load(binaryReader.ReadBytes((int)io.Length));
_loadedAssemblies.Add(name, assembly);
}
}
}
}
return assembly;
}