我在某个地方的博客文章中发现了这个解决方案,但是它在一段时间之前就已经失去了链接。
您可以通过手动编辑您的项目文件来添加自定义目标,如下所示。这种方式会自动嵌入所有引用,因此您不必在添加/删除引用后手动执行任何操作。它也允许你为不同的项目有不同的$(ConfigurationName)
值。
<Project>
...
<!-- Custom target - this includes all dll references as embedded resources during build. -->
<Target Name="AfterResolveReferences">
<ItemGroup>
<EmbeddedResource Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.Extension)' == '.dll'">
<LogicalName>%(ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension)</LogicalName>
</EmbeddedResource>
</ItemGroup>
</Target>
</Project>
对于每个嵌入式程序集,嵌入式资源名称将为AssemblyName.dll
。如果你想在运行时加载这些DLL,你可以做类似这样的事情:
private void LoadAssemblyFromResource(string assemblyName)
{
if (!assemblyName.EndsWith(".dll"))
assemblyName += ".dll";
Assembly executingAssembly = Assembly.GetExecutingAssembly();
using (Stream stream = executingAssembly.GetManifestResourceStream(assemblyName))
{
if (stream == null)
throw new ArgumentException("Embedded assembly not found: " + assemblyName, "assemblyName");
byte[] assemblyRawBytes = new byte[stream.Length];
stream.Read(assemblyRawBytes, 0, assemblyRawBytes.Length);
Assembly.Load(assemblyRawBytes);
}
}
右键单击你的EXE项目,选择“Project dependencies”。 –