如何强制app.config变成exe.config

How to force app.config to become exe.config

这可能是一个错误,但我的解决方案中有 2 个 F# 项目。一个是控制台应用程序,另一个是测试应用程序(expecto test 在技术上也是控制台)。解决方案中还有其他 3 个 C# 项目。

每当我构建解决方案时,启动项目中的 app.config 都不会复制到 foo.exe.config。而是创建一个默认的 F# 配置文件并将其放置在那里。

正在生成的文件如下所示

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.4.0.0" newVersion="4.4.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
我的解决方案中的

None 应用程序配置看起来甚至有点像那样。我检查过我的 app.configs 是否设置为内容模式。这也只是主应用程序的问题;测试应用程序将 app.config 复制到它的 bin/debug 就好了。

每次我想要 运行 程序之前,我都会打开 bin 并将正确的 exe.config 拖放到目录中。我什至不知道从哪里开始寻找可能未正确配置的内容。

您为什么认为这是一个错误?每秒有数千个 app.configs 被复制——你会认为它已经过很好的测试。您的项目设置方式可能有问题。您可能需要查看项目文件(提示:这是一个您可以阅读的常规 xml 文件)。

如果您通过 VS 构建项目,我建议您首先提高 MSBuild 的详细程度(工具 -> 选项 -> 项目和解决方案 -> 构建和 运行 选项卡)。

完成后,清理并重建您的项目。当您搜索 CopyAppConfigFile 时,您应该能够在生成输出 window 中找到复制 app.config 文件的任务的输出。这应该告诉您什么(如果有的话)真正被复制了——以及从哪里复制的。

以同样的方式,您可以找到作为构建过程一部分的任何其他任务是否出于任何原因尝试覆盖文件 - 只要它产生正确的日志输出。