2011-09-21 30 views
0

我有一個控制檯應用程序引用解決方案中的其他項目。當我構建它時,它將在Debug中複製這些DLL。我想在exe中導入它們。如果我將它們添加到資源然後從那裏加載,它們不會更新。我失去了對引用的DLL的更改。有沒有一種方法可以構建它們並將它們導入到每個構建的可執行文件中?如何將引用的項目導入到exe中?

回答

0

這裏是爲我工作的解決方案:

http://www.hanselman.com/blog/MixingLanguagesInASingleAssemblyInVisualStudioSeamlesslyWithILMergeAndMSBuild.aspx

它合併後的每個組件建立與ILMerge(如在意見提出)。我需要更新.targets文件的.NET Framework 4,如果有人需要它:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> 
    <Target Name="AfterBuild"> 
     <CreateItem Include="@(ReferencePath)" Condition="'%(CopyLocal)'=='true' and '%(ReferencePath.IlMerge)'=='true'"> 
      <Output TaskParameter="Include" ItemName="IlmergeAssemblies"/> 
     </CreateItem> 
     <Message Text="MERGING: @(IlmergeAssemblies->'%(Filename)')" Importance="High" /> 
     <Exec Command="&quot;$(ProgramFiles)\Microsoft\Ilmerge\Ilmerge.exe&quot; /out:@(MainAssembly) &quot;@(IntermediateAssembly)&quot; @(IlmergeAssemblies->'&quot;%(FullPath)&quot;', ' ') /target:exe /targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319 /wildcards" /> 
    </Target> 
    <Target Name="_CopyFilesMarkedCopyLocal"/> 
</Project> 

更新

雖然上述工程的解決方案,你可以把它簡單,你就不需要目標文件。您可以將ILMerge放在解決方案的某個位置。然後在構建之後從那裏調用它。 ILMerge.exe是您需要的全部,在/solutionDirectory/Tools之類的地方複製它。在你的post-build事件命令行中寫一個命令。

$(SolutionDir)Tools\ILMerge.exe /out:"$(ProjectDir)bin\Debug\WindowsGUI.exe" "$(ProjectDir)obj\x86\Debug\WindowsGUI.exe" "$(SolutionDir)BusinessLayer\bin\Debug\BusinessLayer.dll" /target:exe /targetplatform:v4,"$(MSBuildBinPath)" /wildcards 

構建後,你會得到與嵌入式DLL中的.exe文件,你可以單獨運行它。

4

您可以使用ILMerge將多個程序集合併成一個。

+0

我試圖自動化它 –

+0

這可以通過生成後事件來完成。 –

+0

你能提供一個例子嗎? –