【问题标题】:How do I import referenced projects into exe?如何将引用的项目导入 exe?
【发布时间】:2011-09-21 13:49:34
【问题描述】:

我有一个控制台应用程序正在引用解决方案中的其他项目。当我构建它时,它将在调试中复制这些 dll。我想在exe中导入它们。如果我将它们添加到资源然后从那里加载,它们不会更新。我丢失了对引用的 DLL 的更改。有没有一种方法可以构建它们并将它们导入到每个构建的可执行文件中?

【问题讨论】:

    标签: .net visual-studio assemblies


    【解决方案1】:

    您可以使用ILMerge 将多个程序集合并为一个。

    【讨论】:

      【解决方案2】:

      Jeffrey Richter 有一篇关于这个主题的文章:

      http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx

      关键是

      对于您添加的每个 DLL 文件,显示其属性并将其构建操作更改为嵌入式资源。

      【讨论】:

      • 当您添加一个项目作为参考时,它会在参考下。当它是参考时,没有选项将其标记为嵌入式资源。
      【解决方案3】:

      这是对我有用的解决方案:

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

      它在每次构建后使用 ILMerge 合并程序集(如 cmets 中建议的那样)。我需要为 .NET Framework 4 更新 .targets 文件。如果有人需要它:

      <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 之类的地方。在构建后事件命令行中编写命令。

      $(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,您可以单独运行它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-18
        • 1970-01-01
        • 1970-01-01
        • 2014-09-12
        • 2018-03-22
        • 1970-01-01
        • 1970-01-01
        • 2012-04-12
        相关资源
        最近更新 更多