我有一个CLR Empty Project
(.NET Framework 4.6.2(。我注意到引用属性中不存在Embed Interop Types
,我找不到解决方法,有办法打开它吗?看起来它只在C#上可用。
我想出了以下解决方法:
添加要嵌入到项目中的特定程序集,右键单击它,选择Properties
,然后将Item Type
设置为Compiled Managed Resource
,并将以下代码段放在main中的第一行:
[System::STAThread]
int main()
{
System::AppDomain::CurrentDomain->AssemblyResolve += gcnew System::ResolveEventHandler(&loadEmbeddedAssembly);
}
在那里的某个地方:
System::Reflection::Assembly^ loadEmbeddedAssembly(System::Object^ sender, System::ResolveEventArgs^ args) {
System::Reflection::AssemblyName^ assemblyName = gcnew System::Reflection::AssemblyName(args->Name);
System::String^ resourceName = assemblyName->Name + ".dll";
System::IO::Stream^ stream = System::Reflection::Assembly::GetExecutingAssembly()->GetManifestResourceStream(resourceName);
array<System::Byte>^ assemblyData = gcnew array<System::Byte>((unsigned long)stream->Length);
try {
stream->Read(assemblyData, 0, assemblyData->Length);
}
finally {
if (stream != nullptr) delete stream;
}
return System::Reflection::Assembly::Load(assemblyData);
}