如何排除App.config使其不捆绑在.net core 3单文件独立WinForms应用程序的.exe中?

时间:2019-10-06 23:03:22

标签: winforms .net-core .net-core-3.0

我有一个Winforms .NET Core 3应用程序,我想将其发布为独立的单文件部署

这是相关的.csproj文件

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <UseWindowsForms>true</UseWindowsForms>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
    <PublishSingleFile>true</PublishSingleFile>
  </PropertyGroup>

  <ItemGroup>
    <!--PackageReferences-->
  </ItemGroup>

  <ItemGroup>
    <!--ProjectReferences-->
  </ItemGroup>

</Project>

我正在使用<RuntimeIdentifier>win-x64</RuntimeIdentifier>,因此它为Windows x64和<PublishSingleFile>true</PublishSingleFile>生成了一个自包含部署,因此所有内容都嵌入了.exe文件中。

通过运行发布时:

dotnet publish -c Release

我在.exe上获得了.pdbbin\Release\netcoreapp3.0\win-x64\publish文件

- MyApp.exe
- MyApp.pdb

我需要在.csproj文件中进行哪些更改,以便获取MyApp.dll.config旁边的MyApp.exe.config.exe,因此该应用实际上从以下位置读取配置:而不是嵌入的App.Config

我尝试添加此内容

<ItemGroup>
  <Content Update="*.config">
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
  </Content>
</ItemGroup>

此链接Single-file Publish - Build System Interface所暗示,但它仍然只生成两个文件。

1 个答案:

答案 0 :(得分:0)

您的问题帮助我为我解决了这个问题,非常感谢。 希望这对您也有用。

我的.csproj看起来像

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <PublishReadyToRun>true</PublishReadyToRun>
    <PublishSingleFile>true</PublishSingleFile>
    <PublishTrimmed>true</PublishTrimmed>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
  </PropertyGroup>

  <ItemGroup>
    <Content Include="*.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
    </Content>
  </ItemGroup>

只是使用.config文件做了一些进一步的测试

<ItemGroup>
    <None Update="*.config">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
    </None>
  </ItemGroup>

对我有用,上面有其他配置。