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

4
这可能是一个bug,但我的解决方案中有两个F#项目。一个是控制台应用程序,另一个是测试应用程序(expecto测试,因此也是控制台)。解决方案中还有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>

我的解决方案中没有任何一个应用程序配置看起来像那样。我已经检查过我的app.configs设置为内容模式。此外,这只是主应用程序的问题;测试应用程序可以很好地将app.config复制到它的bin/debug目录中。

我已经尝试打开bin文件夹并手动将正确的exe.config拖放到目录中,然后再运行程序。但我不知道该从哪里开始查找可能未正确配置的问题。


请考虑提供更多关于您解决方案的细节,仅凭猜测很难复现。 - Be Brave Be Like Ukraine
这看起来像是如果你礼貌地请求它,Paket 会生成的内容。但是如果没有看到你的项目文件,我无法确切地告诉你这个文件来自哪里。很有可能,在某个地方有些东西你没有注意到。 - Fyodor Soikin
我认为你不需要将 app.config 标记为内容 - 实际上,当你创建一个新的 F# 控制台应用程序时,默认属性是 none/不复制(并且在默认的.targets文件中隐藏的专用任务显式地复制并重命名它)。 - scrwtp
我刚遇到了同样的问题,但是在发布模式下复制。仍然不知道为什么。 - Gus
仍然不确定解决方案。我怀疑这与 Visual Studio 中频繁切换 C# 和 F# 启动项目相关的奇怪错误有关。我的解决方案是为仅包含 F# 项目创建单独的 sln,而不是来回切换启动项目。从那时起,一切似乎都正常工作。 - WhiteleyJ
由于某种原因,msbuild无法清理在obj\Debug\Crawler.fsproj.Crawler.exe.config中生成的默认配置文件。在某个时候它卡在那里了。我手动删除了它,现在一切都正常工作了。 - WhiteleyJ
1个回答

3
为什么您认为这是一个错误?每秒钟都会复制成千上万个app.config文件——您可以假设这已经得到了很好的测试。可能是您的项目设置有问题。您可能需要查看项目文件(提示:它是一个常规的xml文件,您可以阅读)。
如果您通过VS构建项目,我建议您首先提高MSBuild详细程度(工具->选项->项目和解决方案->构建和运行选项卡)。
完成后,请清理并重建您的项目。当您搜索CopyAppConfigFile时,应该能够在构建输出窗口中找到复制app.config文件的任务的输出。这应该告诉您实际复制了什么,以及从哪里复制的。
同样,只要生成适当的日志输出,您就可以找到是否有任何其他构建过程中的任务因某种原因而尝试覆盖该文件。

提高 MSBuild(文件)的详细程度...几乎不可能;-) <抱歉我忍不住了> - robkuz
@robkuz:你没看到我看到的东西... ;) - scrwtp
2
由于某种原因,msbuild无法清理在obj\Debug\Crawler.fsproj.Crawler.exe.config中生成的默认配置文件。在某个时候它卡在那里了。我手动删除了它,现在一切都正常工作了。 - WhiteleyJ
1
@WhiteleyJ 是的,我也遇到过这个问题。就像你猜测的那样,是个bug。 - Rob Grant
答案在评论中。删除obj文件夹,因为里面有一个无法删除的文件。 - WhiteleyJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接