我在一个WPF C#项目上使用Visual Studio 2019作为一个win应用程序,我找到了一种方法来嵌入所有的DLL到exe,这在VS2022中不再有效

5uzkadbs  于 2023-08-07  发布在  C#
关注(0)|答案(1)|浏览(149)

我在一个WPF C#项目上使用Visual Studio 2019作为一个win应用程序。此应用程序配置为旧风格而不是SDK风格的项目。我想有所有的DLL文件嵌入到可执行文件,所以我可以只有一个单一的exe文件。这在Visual Studio 2022和新的SDK样式项目中不再有效。出于某种原因,同样的解决方案在那里行不通。
我尝试了我在以前的项目中所做的同样的事情:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Target Name="AfterResolveReferences">
    <ItemGroup>
      <EmbeddedResource Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.Extension)' == '.dll'">
        <LogicalName>%(ReferenceCopyLocalPaths.DestinationSubDirectory)%(ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension)</LogicalName>
      </EmbeddedResource>
    </ItemGroup>
  </Target>

字符串
现在有了VS 2022和SDK风格的项目,我需要在.vcproj文件中更改更多的东西来获得相同的功能,我必须获得单文件应用程序功能。
Import标记不再起作用,因为它表示无论如何都要添加目标,所以它是重复的。我发现了一种方法,不使用它,并有目标是在年底的建设阶段。

<Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <Exec Command="echo executing the post build event" />
    <ItemGroup>
      <EmbeddedResource Include="@(ReferenceCopyLocalPaths)"
                        Condition="'%(ReferenceCopyLocalPaths.Extension)' == '.dll'">
          <LogicalName>%(ReferenceCopyLocalPaths.DestinationSubDirectory)%(ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension)</LogicalName>
      </EmbeddedResource>
    </ItemGroup>
   </Target>


现在的问题是,由于某种原因,嵌入式的东西不起作用,我在互联网上找不到任何地方解决这个问题。就像每个人都在使用旧的方法,就是这样。也许再也不可能了。
以下是14年前的一篇文章:Embedding DLLs in a compiled executable

sczxawaw

sczxawaw1#

Costura fody仍然适用,如果你想只嵌入参考,只需在nuget包中下载即可。
只需将其安装到项目中并构建源代码,它就会将所有引用DLL嵌入到可执行文件中。无需额外步骤。

相关问题