如何判断代码是否从Visual Studio / Cassini本地运行

时间:2013-05-28 17:46:32

标签: c# wcf visual-studio iis compiler-directives

我有一个接口,让我们称之为ILocateLogFile,使用dev / beta / production服务器的标准实现,以及仅在本地开发环境中工作的接口。如果我在本地或在服务器上运行,我似乎无法想出一个很好的干净方式来决定(最好是在编译时,但运行时会没问题)。如果这很重要,这是在IIS上托管的WCF应用程序。

我提出的最好的方法是使用编译器符号,例如:

    ILocateLogFile locateLogFile;
#if DEBUG
    locateLogFile = new DevSandboxLogFileLocator();
#else
    locateLogFile = new LogFileLocator();
#endif

问题是,编译符号是由构建设置的,我无法控制,我想确定。是否有一些自动方法来检查Visual Studio的存在?或者至少检查一下Cassini而不是IIS?

3 个答案:

答案 0 :(得分:8)

我完成此操作的两种方法1您可以检查进程名称

bool isRunningInIisExpress = Process.GetCurrentProcess()
                                .ProcessName.ToLower().Contains("iisexpress");

或使用自定义设置更新配置文件

<appSettings>
    <add key="ApplicationEnvironment" value="LOCAL_DEV" />
</appSettings>

您专门针对每个环境进行更新,并为您提供

的应用程序查询

我不确定是否有一种方法可以在编译时确定这一点,除了为每个环境提供特殊的构建配置并为每个构建放置一个自定义PRAGMA。我个人认为这不是那么优雅,但它也可以起作用。

答案 1 :(得分:0)

我在这里找到了它,对我有用 Determine if ASP.NET application is running locally

bool isLocal = HttpContext.Current.Request.IsLocal;

答案 2 :(得分:-2)

这是我使用的代码

var initializationDeferred = Q.defer(); // Create here the deferred object so it's common to all init() invocations
var initializationStarted = false;

var init = function() {
  if (!initializationStarted) {
    initializationStarted = true;
    setTimeout(function() {
      // initialized
      console.log('Init timeout fired!');
      initializationDeferred.resolve(true); // Resolve the promise associated to the deferred object
    }, 1000);
  }

  return initializationDeferred.promise; // Return the promise associated to the deferred object
};

var execute = function() {

  return init().then(function(initialized) {
    // Here your module is initialized and you can do whatever you want
    // The value of "initialized" here is always "true"
    console.log('Execute: initialized?', initialized);
  });
};

execute().then(function() {
  // This is executed
  console.log('Execute First invocation');
});
execute().then(function() {
  // This is executed too
  console.log('Execute Second invocation');
});