2015-07-09 2 views
0

У меня есть проект веб-сайта, который я унаследовал и пытаюсь очистить. У него был файл Common.cs с более чем 10 000 loc, поэтому я с тех пор отделял его от разных файлов. Проблема заключается в том, что в верхней части общего файла является #define UAT заявления, которое используется в коде, чтобы принимать определенные решения конфигурации, такие как:Условные константы компиляции для проекта веб-сайта

#if UAT 
    using WCFServiceUAT; 
#else 
    using WCFServicePRD; 
#endif 

Так что теперь, когда я иду, чтобы развернуть серийную версию этого приложения , Мне придется удалить оператор #define во многих разных местах, что, по-видимому, является склонным к ошибкам и вообще плохой идеей. Я ищу что-то такое, как условные константы компиляции, где я могу определить это один раз и повлиять на весь проект.

Этот тип управления конфигурацией используется только в файлах C#. оператор #define, который требуется изменить только в Default.aspx.cs и Common.cs, но после моих усилий по реструктуризации он теперь появляется намного больше. Хотя было бы неплохо, если бы мой файл site.master изменил заголовок, основанный на некоторой конфигурации, это гораздо меньше беспокоит.

Я попытался изменить свойства конфигурации сборки для проекта, но не имею никаких параметров, таких как константы условной компиляции, и предполагаю, что он не поддерживается для моего типа проекта. Есть ли другой способ поместить #define на глобальном уровне проекта, а не вверху каждого файла? Единственное решение, которое я нашел для проекта веб-приложения, и на основе Web Application Projects Vs Web Site Projects, я не верю, что работаю с проектом типа веб-приложения, потому что нет .csproj-файла.

+1

Выбор свойств проекта, на второй странице (BUILD) вы должны увидеть InputBox «условной компиляции символов», где вы можете установить/удалить символ UAT – Steve

+0

Я говорю, что это нетам все же. У меня есть 'Перед запуском страницы запуска:', 'Target Framework',' Build solution action' и 'Access validation' – Cole9350

+0

Я вижу, это проект веб-сайта, и, похоже, этот проект не хватает этого условного символы. Похоже, что единственный вариант - преобразовать ваш проект в веб-приложение. [Здесь шаг за шагом] (http://stackoverflow.com/questions/735054/how-to-convert-asp-net-website-to-asp-net-web-application) – Steve

ответ

-3

См https://www.codeproject.com/Questions/233650/How-to-define-Global-veriable-in-Csharp-net

В проекте подкаталоге App_Code, я создал файл Globals.cs, как это:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace GlobalVariables 
{ 

    /// <summary> 
    /// Summary description for Globals 
    /// See https://www.codeproject.com/Questions/233650/How-to-define-Global-veriable-in-Csharp-net 
    /// </summary> 
    public static class Globals 
    { 
     // Note that now the obsolete code now only leaves one warning 
     // for the block excluded code: 
     //  Unreachable code detected 
     // instead of a warning line for each instance of obsolete code. 
     // The "Unreachable code detected" can be disabled and enabled with 
     // #pragma warning disable 162 
     // #pragma warning enable 162 
     public const bool UAT = true; 

     static Globals() 
     { 
      // 
      // TODO: Add constructor logic here 
      // 
     } 
    } 
} 

В файлах проекта .ascx.cs, вам не нужно иметь «, используя ».

В том месте, где вы хотите, чтобы это сделать разницу, вы делаете это:

if (GlobalVariables.Globals.UAT) // See App_Code\Globals.cs 
{ 
    // Do the UAT stuff 
} 
else 
{ 
    // Do the other stuff 
} 

В коде, который не используется, вы получите одно предупреждение: предупреждение CS0162: Недоступен код Обнаружен Это сообщение может быть отключена:

#param warning disable 162 
if (GlobalVariables.Globals.UAT) // See App_Code\Globals.cs 
{ 
    // Do the UAT stuff 
} 
else 
{ 
    // Do the other stuff 
} 
#param warning enable 162 
+0

Вы не поняли оригинальный вопрос. Я бы предложил вам удалить это ответ. –

Смежные вопросы