外部化appSettings配置部分(使用configSource)和mstest的冲突

时间:2011-06-03 22:12:12

标签: c# asp.net visual-studio unit-testing mstest

我正在使用外部化配置部分进行appsettings,每个开发人员可以使用不同的部分,如下所示:

  <appSettings configSource="appsettings.config" />

当我针对这个项目运行mstest(它是一个Web应用程序)时,它会盲目地修改这个部分:

  <appSettings configSource="appsettings.config">
    <add key="microsoft.visualstudio.teamsystems.backupinfo" value="1;web.config.backup.af6ed449-e04a-4a52-99d6-b8df0b133316" />
    <add key="microsoft.visualstudio.teamsystems.aspnetdevserver:/" value="56917;True;3448;1;-8588944684513929784" />
  </appSettings>

这显然是错误的,即使根据架构。

它需要修改它的原因是指定它将要运行的有关Cassini / dev服务器的信息。我认为就是这样,它似乎没有修改文件中的任何其他部分(很难说,因为它也完全重新格式化了文件)。

问题是,我有什么选择才能让它发挥作用?

到目前为止,我只提出了两个实用的,都是次优的

  1. 放弃appsettings的外部配置

  2. 从Cassini切换到cassinidev - 然后我可以停止使用了 [AspNetDevelopmentServer()] 属性,是那个 导致web.config需要 改性

  3. 在VS中配置某些内容以防止它执行此操作。为什么 它甚至关心自己的哪个端口 卡西尼正在努力?我不能 找到任何配置设置。

  4. 等待MS修复此问题,因此[AspNetDevelopmentServer()]会 使用外部化appSettings

2 个答案:

答案 0 :(得分:5)

有点延迟,所以我不知道这是否仍然适合你......

但您可以使用file=的{​​{1}}属性代替<appSettings> 我:

configSource

虽然 <appSettings file="appsettings.config" /> 期望只替换整个部分,但configSource会合并这些部分。因此,即使添加了子元素,它仍会添加外部文件中的其他元素。

答案 1 :(得分:0)

我知道这是一个很晚的响应,但是在2018年7月(使用Visual Studio 2017)中,我仍然遇到此问题,但是这里有一些更多信息,即使您使用file或configSource进行处理,mstest的问题是因为其他配置文件不会复制到您的testresults文件夹中。

我们发现VSStudio中的测试有所不同。 在那里,您可以只在类级别使用部署属性。

对于在构建服务器上运行的测试,您将需要执行以下步骤

首先将这些其他配置文件的属性设置为“内容并复制”(如果较新)

第二个添加.testsettings文件作为解决方案,而不是每个项目!

<?xml version="1.0" encoding="UTF-8"?>
<TestSettings name="TestSettings" 
              id="350a1732-b798-4794-b711-15b44e8504e9" 
              xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
  <Deployment>
    <DeploymentItem filename="project1\file1.config" />
    <DeploymentItem filename="project2\file2.config" />
  </Deployment>
</TestSettings>

在VS studio的“测试” =>“测试设置”菜单中第三次引用此文件

然后检查构建服务器上的testresults文件夹,它现在应包含这2个文件