如何不将app.config文件复制到输出目录

时间:2016-10-27 16:10:34

标签: c# wpf visual-studio-2015 app-config visual-studio-project

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

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

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

App.config image

尽管有"不要复制"但是,我仍然得到一个" MyAppName.exe.config"每次构建项目时生成的文件 。为什么会这样?我怎么能把它关掉?这很烦人。

感谢您的任何建议!

3 个答案:

答案 0 :(得分:12)

app.config的处理很特殊,处理按名称,构建过程将按照以下顺序选择app.config文件:

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

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

替换app.config名称

如果你想保留文件而不删除它,你需要将“Build Action”属性更改为与“None”或“Content”不同的属性,你可以使用列表中的任何现有值(我建议“ AdditionalFiles“)或您想要使用的任何值,即”MyConfigFile“,现在将保留文件在项目中,但没有在输出目录中生成配置文件的逻辑。

或者您可以将文件重命名为“app.config”之外的其他内容,并保留“Build Action”和“Copy to Output Directory”的当前属性值。

答案 1 :(得分:1)

visual studio 2017 app.config 被默认复制到输出文件夹后。根据 MS,这是设计使然 vs developercommunity

在 MSBuild 中调用了一个名为 AppConfig 的默认属性,它等于“app.config” 但是,即使将该属性设置为空 - 它仍然会使用 Find 任务找到应用程序配置并复制: 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 根本不会复制到输出目录,但会在解决方案资源管理器中可用。

答案 2 :(得分:0)

在MSBuild参数中添加 <groupId>com.aventstack</groupId> <artifactId>extentreports</artifactId> <version>3.0.1</version> 以禁止显示库项目.config文件,库xml文档等。通过上述操作,仅保留了PDB。

此参数也可以添加到csproj文件中,但是我个人认为,将其作为构建配置的一部分更易于管理。