Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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# 来自多个项目的Visual Studio用户属性.Settings.Default文件?_C#_Visual Studio_Unit Testing_Configuration_Configuration Files - Fatal编程技术网

C# 来自多个项目的Visual Studio用户属性.Settings.Default文件?

C# 来自多个项目的Visual Studio用户属性.Settings.Default文件?,c#,visual-studio,unit-testing,configuration,configuration-files,C#,Visual Studio,Unit Testing,Configuration,Configuration Files,因此,尽管在最新的VisualStudio设置文件中有很多信息很难理解和找到,但我还是明白了这一点。在可执行项目上,单击鼠标右键并选择“属性”,然后左键单击左侧的“设置”选项卡,根据需要创建设置文件,并在表中填写一些设置名称、类型和值。如果希望这些是嵌入在可执行文件中的永久默认值且为只读,请将作用域设置为application,但如果将其保留在user的默认作用域,则可以将新值保存到system AppData文件夹中的特殊user.config文件中,该文件将在每次启动应用程序时读取,覆盖嵌入

因此,尽管在最新的VisualStudio设置文件中有很多信息很难理解和找到,但我还是明白了这一点。在可执行项目上,单击鼠标右键并选择“属性”,然后左键单击左侧的“设置”选项卡,根据需要创建设置文件,并在表中填写一些设置名称、类型和值。如果希望这些是嵌入在可执行文件中的永久默认值且为只读,请将作用域设置为application,但如果将其保留在user的默认作用域,则可以将新值保存到system AppData文件夹中的特殊user.config文件中,该文件将在每次启动应用程序时读取,覆盖嵌入的默认值。这基本上允许每个用户拥有一个由系统自动存储的配置文件,保存一些配置设置,如最后一个窗口位置等

设置后,您可以直接访问以下设置:

var variable1 = Properties.Settings.Default.Variable1;
var variable2 = Properties.Settings.Default.Variable2;
等等。将属性设置为新值同样容易:

Properties.Settings.Default.Variable1 = variable1;
Properties.Settings.Default.Variable2 = variable2;
然后,如果要将具有当前值的特殊用户文件保存到C:\users\username\AppData\Local\ApplicationName.exe.xxxx\user.config中,则只需使用:

Properties.Settings.Default.Save();
问题是——我想从解决方案中的所有文件中访问这些相同的设置,但自动生成的方法被标记为内部方法,因此只能从我的主exe项目中访问它们。我可以创建一个类来导出设置,但这似乎只有在启动可执行文件始终相同的情况下才起作用。当我使用xunit 2.0运行单元测试时,我发现设置没有设置-如果我使用库设置并保存它们,它们会显示在AppData中的Microsoft文件夹中,该文件夹似乎与Visual Studio相对应

有人知道我可以在整个解决方案中可靠地访问项目的Properties.Settings.Default值的方法吗?还是我一直在使用一个已知位置的直接文件以及所有需要的I/O和解析

如果是,在内置Visual Studio设置系统之外,是否有用于此任务的标准C配置文件库

编辑-更新: 设置文件似乎基于以下内容:

程序集信息属性/AssemblyInfo.cs或项目属性/应用程序/程序集信息/公司中的公司名称

如果公司为空,则它似乎使用/Application/Default namespace中的默认名称空间,该名称空间与Properties/Settings.Settings/Settings.Designer.cs中使用的名称空间相匹配 可执行文件名,即app.exe

这严格来说是运行时的可执行文件名,包括扩展名,因此如果重命名该文件,将更改AppData中的设置文件名和位置 程序集版本

AppData/Local中的文件夹将在上面1,然后一个嵌套文件夹将在上面具有可执行文件名2并附加一些其他字符,最后一个嵌套文件夹将是上面的版本3,其中的文件将是user.config

因此,当单元测试运行程序执行时,运行程序的公司将用于1内置VS运行程序将使用Microsoft,Resharper运行程序将使用JetBrains等,exe名称仍将以测试的名称空间开始,然后我想版本号也是来自测试运行程序


这意味着在运行单元测试时,它将始终查找并保存到与主可执行文件不同的设置文件-因此,当您从任何程序集访问Properties.settings.Default参数时,运行单元测试时,它将在不同的位置查找文件,并将其保存到与运行主可执行文件不同的位置。

通过将以下内容添加到主可执行文件项目中的AssemblyInfo.cs[assembly:InternalsVisibleToUnitTestProject1]中,始终可以公开标记为内部的对象。然后,您应该可以从测试项目访问内部对象


谢谢-我会尝试一下,然后再报告这确实起到了作用,所以我不需要将设置封装在类中来导出它们。i、 我可以直接从friend程序集访问它们,但它不能解决将程序集存储在不同文件中的问题。我将更新这个问题。因此,这确实回答了我原来的问题,但看起来我无法使用配置管理的VS方法访问主可执行文件和单元测试中的设置-集成测试…: