我在某個地方的博客文章中發現了這個解決方案,但是它在一段時間之前就已經失去了鏈接。
您可以通過手動編輯您的項目文件來添加自定義目標,如下所示。這種方式會自動嵌入所有引用,因此您不必在添加/刪除引用後手動執行任何操作。它也允許你爲不同的項目有不同的$(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」。 –