C# 在调试时使用不同的文件,并在NuGet包中使用该逻辑

C# 在调试时使用不同的文件,并在NuGet包中使用该逻辑,c#,conditional,C#,Conditional,如果在调试或发布模式下运行解决方案(安装NuGet包的解决方案),是否可以在打包到NuGet包的代码中使用条件逻辑来返回不同的变量 我正在为我们的质量保证部门开发一个框架,并试图实现一种存储设置的方法(例如运行测试的浏览器等)。这些文件存储在Config.json文件中,我不想让QAs编辑默认文件,而是希望有一个Config.local.json文件,即.gitingore'd 我有下面的代码在文件之间切换,如果我在整个解决方案中将框架作为一个项目,但如果它被编译成一个NuGet包并安装在解决方

如果在调试或发布模式下运行解决方案(安装NuGet包的解决方案),是否可以在打包到NuGet包的代码中使用条件逻辑来返回不同的变量

我正在为我们的质量保证部门开发一个框架,并试图实现一种存储设置的方法(例如运行测试的浏览器等)。这些文件存储在
Config.json
文件中,我不想让QAs编辑默认文件,而是希望有一个
Config.local.json
文件,即.gitingore'd

我有下面的代码在文件之间切换,如果我在整个解决方案中将框架作为一个项目,但如果它被编译成一个NuGet包并安装在解决方案上(当前获取框架的过程),则此代码不起作用

我们之所以使用
.json
文件,是因为编译构建代理(TeamCity)后需要修改一个文件


在程序启动期间,您可以执行以下操作:

#if DEBUG
MyPackage.PathProvider.Debug = true;
#endif
public static bool Debug = false;
public static string FilePath()
{
    var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
    var filePath = string.Empty;

    if(Debug)
       filePath = Path.GetFullPath(string.Format(@"{0}\Settings\Config.local.json", baseDirectory));
    else
       filePath = Path.GetFullPath(string.Format(@"{0}\Settings\Config.json", baseDirectory));
    return filePath;
}
其中,MyPackage是您提到的Nuget包,PathProvider是其中的一个类,Debug是该类中的一个静态bool

因此,在您的nuget打包类中,您应该有如下内容:

#if DEBUG
MyPackage.PathProvider.Debug = true;
#endif
public static bool Debug = false;
public static string FilePath()
{
    var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
    var filePath = string.Empty;

    if(Debug)
       filePath = Path.GetFullPath(string.Format(@"{0}\Settings\Config.local.json", baseDirectory));
    else
       filePath = Path.GetFullPath(string.Format(@"{0}\Settings\Config.json", baseDirectory));
    return filePath;
}

在程序启动期间,您可以执行以下操作:

#if DEBUG
MyPackage.PathProvider.Debug = true;
#endif
public static bool Debug = false;
public static string FilePath()
{
    var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
    var filePath = string.Empty;

    if(Debug)
       filePath = Path.GetFullPath(string.Format(@"{0}\Settings\Config.local.json", baseDirectory));
    else
       filePath = Path.GetFullPath(string.Format(@"{0}\Settings\Config.json", baseDirectory));
    return filePath;
}
其中,MyPackage是您提到的Nuget包,PathProvider是其中的一个类,Debug是该类中的一个静态bool

因此,在您的nuget打包类中,您应该有如下内容:

#if DEBUG
MyPackage.PathProvider.Debug = true;
#endif
public static bool Debug = false;
public static string FilePath()
{
    var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
    var filePath = string.Empty;

    if(Debug)
       filePath = Path.GetFullPath(string.Format(@"{0}\Settings\Config.local.json", baseDirectory));
    else
       filePath = Path.GetFullPath(string.Format(@"{0}\Settings\Config.json", baseDirectory));
    return filePath;
}

如果只使用Config.local.json(如果找到了),而使用Config.json(否则)呢?生成代理不会有config.local.json文件,是吗?当您的包的用户发现其设置不起作用的原因时,他们会非常恼火-也就是说,您的包在调试时查看了不同的配置文件Visual Studio已经有了处理配置和加载不同配置文件以进行调试的机制,发布、测试、登台、生产或最终程序员想要使用的任何环境。不要通过添加硬编码的非标准方式让人们感到惊讶。你不会帮助别人,而是让人们加倍感谢你的热情回应@PanagiotisKanavos。用户是15个人,他们坐在一起相对较近,因此通信是可管理的。我相信我的问题很清楚,因为我在问一种方法,a)有一个文件可以在QA在本地运行测试时使用b)有一个文件只是由构建代理(teamcity)使用&c)在编译后配置该文件。听起来你也知道我是如何做到这一点的,所以你能提供的任何实际答案都会非常有用。@mikez谢谢你的评论,我会试试看。如果你只使用Config.local.json(如果找到了),而使用Config.json(否则)呢?生成代理不会有config.local.json文件,是吗?当您的包的用户发现其设置不起作用的原因时,他们会非常恼火-也就是说,您的包在调试时查看了不同的配置文件Visual Studio已经有了处理配置和加载不同配置文件以进行调试的机制,发布、测试、登台、生产或最终程序员想要使用的任何环境。不要通过添加硬编码的非标准方式让人们感到惊讶。你不会帮助别人,而是让人们加倍感谢你的热情回应@PanagiotisKanavos。用户是15个人,他们坐在一起相对较近,因此通信是可管理的。我相信我的问题很清楚,因为我在问一种方法,a)有一个文件可以在QA在本地运行测试时使用b)有一个文件只是由构建代理(teamcity)使用&c)在编译后配置该文件。听起来你也知道我是如何做到这一点的,所以你能提供的任何切实可行的答案都会非常感谢。@mikez谢谢你的评论,我会试试的。