有没有办法在发布模式下构建时自动使用单独的 app.config?
换句话说,我想用一个 app.config 进行测试,然后用另一个发布。
目前,我保留一个名为 app.config.production 的单独副本,并在构建发布后手动覆盖 bin\Release\Application.exe.config。
有没有办法在发布模式下构建时自动使用单独的 app.config?
换句话说,我想用一个 app.config 进行测试,然后用另一个发布。
目前,我保留一个名为 app.config.production 的单独副本,并在构建发布后手动覆盖 bin\Release\Application.exe.config。
通过上下文菜单在解决方案资源管理器中卸载项目。
.csproj
通过上下文菜单编辑文件并添加:
<PropertyGroup>
<AppConfig>App.$(Configuration).config</AppConfig>
</PropertyGroup>
我最近发布了对类似 SO 主题的极其迟到的回复: https ://stackoverflow.com/a/27546685/2798367
为了清楚起见,我将在这里重复一遍:
这对聚会来说有点晚了,但我偶然发现了一种实现文件web.transform
方法的好方法。app.config
(即它利用了命名空间http://schemas.microsoft.com/XML-Document-Transform
)
我认为它“不错”,因为它是一种纯 xml 方法,不需要 3rd 方软件。
根据您的各种构建配置,父/默认 App.config 文件来自。然后这些后代只会覆盖他们需要的东西。x
在我看来,这比必须维护大量复制的配置文件(例如在其他答案中)要复杂和强大得多。
演练已在此处发布:http: //mitasoft.wordpress.com/2011/09/28/multipleappconfig/
妈妈,看 - 我的 IDE 中没有明确的构建后事件!
一种简单快捷的方法是创建第二个文件“App.release.config”并插入此预构建事件:
IF $(ConfigurationName) == Release COPY /Y "$(ProjectDir)App.config" "$(ProjectDir)App.debug.config"
IF $(ConfigurationName) == Release COPY /Y "$(ProjectDir)App.release.config" "$(ProjectDir)App.config"
这个帖子构建事件:
IF $(ConfigurationName) == Release COPY /Y "$(ProjectDir)App.debug.config" "$(ProjectDir)App.config"
这可能有点奇怪,但它允许您继续使用这些.Settings
文件作为调试设置,这些文件仍然链接到App.config
. 必须手动构建,App.release.config
但切换此功能非常容易。
我强烈推荐将 SlowCheetah 用于 app.config 转换。在此处访问此 nuget gem Visual Studio Gallery
与最佳答案类似,但使用这种方法,如果喜欢,您可以看到实际文件,并且 intellisense 不会在 csproj 文件中抱怨:
<Target Name="SetAppConfig" BeforeTargets="Compile">
<Copy SourceFiles="debug.config" DestinationFiles="app.config" OverwriteReadOnlyFiles="true" Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " />
<Copy SourceFiles="release.config" DestinationFiles="app.config" OverwriteReadOnlyFiles="true" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " />
</Target>
一个干净的解决方案是将 2 个文件分组,App.Debug.config
然后根据编译时的配置将好文件更改为:App.Release.config
App.config
App.config
<ItemGroup>
<None Include="App.config" />
<None Include="App.Debug.config">
<DependentUpon>App.config</DependentUpon>
</None>
<None Include="App.Release.config">
<DependentUpon>App.config</DependentUpon>
</None>
</ItemGroup>
<Target Name="SetAppConfig" BeforeTargets="Compile">
<Copy SourceFiles="App.Debug.config" DestinationFiles="App.config" OverwriteReadOnlyFiles="true" Condition=" '$(Configuration)' == 'Debug' " />
<Copy SourceFiles="App.Release.config" DestinationFiles="App.config" OverwriteReadOnlyFiles="true" Condition=" '$(Configuration)' == 'Release' " />
</Target>
使用此解决方案,您将在 Visual Studio 中得到类似的结果:
我不知道这是否有帮助,但 app.config 将识别标准的 MSBUILD 替换字符串,例如 $(Configuration)。