Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何将引用的项目导入exe?_.net_Visual Studio_Assemblies - Fatal编程技术网

.net 如何将引用的项目导入exe?

.net 如何将引用的项目导入exe?,.net,visual-studio,assemblies,.net,Visual Studio,Assemblies,我有一个控制台应用程序,它引用解决方案中的其他项目。当我构建它时,它将在调试中复制这些DLL。我想在exe中导入它们。如果我将它们添加到资源中,然后从那里加载,它们不会被更新。我丢失了引用DLL上的更改。是否有一种方法可以生成它们并将它们导入每个生成的可执行文件中?您可以使用将多个程序集合并为一个。您可以使用将多个程序集合并为一个。Jeffrey Richter有一篇关于此主题的文章: 关键是 对于您添加的每个DLL文件,显示其属性并将其构建操作更改为嵌入式资源。Jeffrey Richter

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

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

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

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

关键是


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

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

关键是


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

以下是适合我的解决方案:

它在每次生成后使用ILMerge合并程序集(如注释中建议的)。我需要更新.NETFramework4的.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>

构建完成后,您将获得带有嵌入式DLL的.exe,您可以单独运行它。

以下是对我有效的解决方案:

它在每次生成后使用ILMerge合并程序集(如注释中建议的)。我需要更新.NETFramework4的.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>

生成后,您将获得带有嵌入式DLL的.exe,并且可以单独运行它。

当您添加项目作为引用时,它将位于引用下。当它是引用时,没有选项将其标记为嵌入资源。当您将项目添加为引用时,它将位于引用下。当它是引用时,没有选项将其标记为嵌入式资源。