Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .net标准配置管理器打开错误的app.config_C#_Unit Testing_.net Core_.net Standard - Fatal编程技术网

C# .net标准配置管理器打开错误的app.config

C# .net标准配置管理器打开错误的app.config,c#,unit-testing,.net-core,.net-standard,C#,Unit Testing,.net Core,.net Standard,我试图在.net标准项目上运行.net核心单元测试项目中的测试方法,并加载测试项目中的配置文件(因为这是当前正在执行的程序集)。我得到一个错误的配置文件,当前文件路径为“C:\Users\xxx\.nuget\packages\microsoft.testplatform.testhost\15.3.0-preview-20170628-02\lib\netstandard1.5\testhost.dll.config” 我不认为你弄错了。您将获得测试项目的配置文件,该文件是正确的,因为您正在运

我试图在.net标准项目上运行.net核心单元测试项目中的测试方法,并加载测试项目中的配置文件(因为这是当前正在执行的程序集)。我得到一个错误的配置文件,当前文件路径为“C:\Users\xxx\.nuget\packages\microsoft.testplatform.testhost\15.3.0-preview-20170628-02\lib\netstandard1.5\testhost.dll.config”


我不认为你弄错了。您将获得测试项目的配置文件,该文件是正确的,因为您正在运行测试项目

每个项目都有自己的配置文件,或者没有。它不能只是去加载另一个项目的配置文件


底线是:只需从.net标准项目的配置文件复制您想要的任何特定配置到单元测试的配置文件。

您可以选择指向另一个配置文件。消息来源的功劳归于罗恩·哈格曼(Ron Hagerman),他只做了轻微的修改。下面的xunit测试可能有助于理解如何设置位置。令人沮丧的是,.net核心单元测试在以下目录的testhost.dll.config文件中查找连接字符串

C:\Users\[UserName]\.nuget\packages\microsoft.testplatform.testhost\[version]\lib\netstandard1.5\testhost.dll.config

[Fact]
public void AccessAppSettings_ConnectionString()
{
     //obtain the current directory for the executable
     Uri UriAssemblyFolder = new Uri(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly()
                                           .GetName().CodeBase));
     string appPath = UriAssemblyFolder.LocalPath;
     //Change the "DataProvider.Tests.dll" to whatever your 
     //library or executable name. 
     //Note: Configuration manager will add the .config extension
     Configuration config = ConfigurationManager
            .OpenExeConfiguration(appPath + @"\" + "DataProvider.Tests.dll");

     ConnectionStringsSection section = 
                  config.GetSection("connectionStrings") as ConnectionStringsSection;

     string expectedString = $"Data Source=mysqliteDBName.sqlite3";
     //Change "mySqliteConnectionString" to your connection string name   
     var sut_connectionString = 
                 section.ConnectionStrings ["mySqliteConnectionString"].ConnectionString;

      Assert.NotNull(sut_connectionString);
      Assert.Contains(expectedString, sut_connectionString);
示例配置文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <connectionStrings>
        <add name="mySqliteConnectionString" connectionString="Data Source=mysqliteDBName.sqlite3" />
        <add name="otherConnectionString" connectionString="Data Source=othersqliteDBName.sqlite3" />
    </connectionStrings>
</configuration>


为什么您认为这是错误的配置?单元测试的执行路径是什么?NET Core根本不使用app.config是有原因的。你应该注入配置,而不是硬编码它的loaderoh!明白你说的了。第一次使用.NETCore进行单元测试时,我没有想到执行的主机路径与原始路径不同。如何注入?我的App.config在测试项目中查看我发布的路径nugget文件夹中的路径
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <connectionStrings>
        <add name="mySqliteConnectionString" connectionString="Data Source=mysqliteDBName.sqlite3" />
        <add name="otherConnectionString" connectionString="Data Source=othersqliteDBName.sqlite3" />
    </connectionStrings>
</configuration>