8

我有一个正在构建的 WPF 应用程序。我正在使用 Visual Studio Community 2015。为了创建一个“真正的”发布版本,我正在更改一些构建设置,以便它只生成将安装在用户计算机上的必要文件。所以没有vshost exe,没有生成的XML文件等等等等(我保留了PDB文件生成,但是)。

我拥有我想要的一切,除了一个文件。我在每个项目中都有一个 App.config 文件。我不介意在我的调试版本中将其复制到输出目录,但在我的“真正”发布版本中,我不希望它在那里。

该文件已在其属性中设置为“请勿复制”。见下图:

App.config 映像

然而,尽管有“不复制”设置,我仍然会在每次构建项目时生成一个“MyAppName.exe.config”文件。为什么会这样?我怎样才能关闭它?这很烦人。

感谢您的任何建议!

4

3 回答 3

22

app.config 的处理比较特殊,按 Name处理,构建过程会按照这个顺序选择 app.config 文件:

  • 选择在主项目中设置的值 $(AppConfig)。
  • 在与项目相同的文件夹中选择@(None) App.Config。
  • 选择与项目相同的文件夹中的@(Content) App.Config。
  • 在项目的任何子文件夹中选择@(None) App.Config。
  • 在项目的任何子文件夹中选择@(Content) App.Config。

$(AppConfig) 是一个 MSBuild 属性,如果为空,它将在“无”或“内容”MSBuild 项目组中查找名称为“App.Config”的文件,如果匹配,则使用该文件并将被复制到输出目录,用 [AssemblyName].config 替换 app.config 名称

如果要保留文件而不删除它,则需要将“构建操作”属性更改为与“无”或“内容”不同的值,您可以使用列表中的任何现有值(我建议“附加文件”)或您要使用的任何值,即“MyConfigFile”,现在将文件保留在项目中,但没有在输出目录中生成配置文件的逻辑。

或者,您可以将文件重命名为不同于“app.config”的名称,并保留“构建操作”和“复制到输出目录”的当前属性值。

于 2016-10-27T20:17:29.113 回答
1

添加/p:AllowedReferenceRelatedFileExtensions=.pdbMSBuild 参数以抑制库项目 .config 文件、库 xml 文档等。使用上述方法,仅保留 PDB。

这个参数也可以添加到 csproj 文件中,但我个人觉得作为构建配置的一部分更容易管理。

于 2020-12-17T12:58:40.317 回答
1

Visual Studio 2017 app.config 默认复制到输出文件夹后。根据 MS 的说法,这是设计与开发者社区的对比

在 MSBuild 中调用了名为 AppConfig 的默认属性,它等于“app.config”但是即使将该属性设置为空 - 它仍然会使用查找任务找到应用程序配置并复制: https ://github.com/dotnet /msbuild/blob/13522d2466ae1634177e2a6a40fefaedff95139c/src/Tasks/Microsoft.Common.CurrentVersion.targets#L1159

我发现最好的解决方法是手动删除它并添加回资源:

<ItemGroup>
  <None Remove="app.config" />
  <Resource Include="app.config" CopyToOutputDirectory="Never" />
</ItemGroup>

请注意,在此更改之后,app.config 将根本不会复制到输出目录,但会在解决方案资源管理器中可用。

于 2021-03-24T13:23:41.107 回答