Czy w ogóle istnieje # definiowanie stałej na podstawie rozwiązania? [duplikat]

to pytanie ma już odpowiedzi tutaj : Jak ustawić zmienną kompilacji warunkowej? (3 odpowiedzi) Zamknięte 2 miesiące temu .

Czy w ogóle istnieje #define Constant rozwiązanie Visual Studio?

Można zdefiniować stałą na podstawie csproject, a można umieścić #define constant w pliku cs, ale zastanawiam się, czy można zdefiniować ją na podstawie vs sln?

Author: Graviton, 2011-03-11

5 answers

Możesz użyć wariacji na temat podejścia Ritcha ze wspólnymi ustawieniami projektu. Zasadniczo musisz wprowadzić jedną zmianę na końcu każdego pliku projektu w rozwiązaniu:

  <PropertyGroup Condition="'$(SolutionDir)' == '' or
                     '$(SolutionDir)' == '*undefined*'">
      <SolutionDir>..\..\</SolutionDir>
    </PropertyGroup>
    <Import Project="$(SolutionDir)CommonSettings.targets" />
  </Project>

Następnie można zdefiniować Komendy.cele, aby zawierać szerokie ustawienia rozwiązania.

  <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
           ToolsVersion="3.5">
      <PropertyGroup>
          <TacoBuild>true</TacoBuild>
      </PropertyGroup>
  </Project>

To w zasadzie wszystko, chyba że chcesz nadpisać lub scalić ustawienia projektu już zdefiniowane w każdym projekcie. Poniższy link omawia jak to zrobić w niektórych szczegóły.

Http://www.ademiller.com/blogs/tech/2007/12/common-project-settings-for-your-visual-studio-solution/

 23
Author: Ade Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-11 05:40:21

Mam inne podejście do tego:

  1. Edycja globalnego pliku konfiguracyjnego. Na przykład w moim przypadku jest .netcf2. 0 czyli $(MSBuildBinPath)\microsoft.compactframework.csharp.targets.

    Dodaj następujący wiersz:

    <Import Project="$(SolutionDir)CommonSettings.targets" Condition="exists('$(SolutionDir)CommonSettings.targets')" />
    

    To ma powiedzieć MSBuild importować CommonSettings.cele, jeśli istnieje w folderze rozwiązanie.

  2. Utwórz CommonSettings.cele w folderze rozwiązania.

    Na przykład do zdefiniowania symbolu ABC:

    <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <PropertyGroup>
        <DefineConstants>$(DefineConstants);ABC</DefineConstants>
        </PropertyGroup>
    </Project>
    
 13
Author: Tim Chan Yiu Man,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-05 03:12:21

Pośrednio jest. Jeśli ustawisz zmienną środowiskową z flagą i uruchomisz VS:

set TacoBuild=true
devenv.eve bigproject.sln

Lub uruchom MSBuild z linii poleceń:

msbuild /p:TacoBuild=true
W Twoim .pliki csproj, które musisz dodać PropertyGroup:
<PropertyGroup Condition="'$(TacoBuild)'=='true'">
    <DefineConstants>$(DefineConstants);TacoBuild</DefineConstants>
</PropertyGroup>

W Twoim kodzie potrzebujesz preprocesora def:

#if TacoBuild 
    const int myConst = 42;
#endif

Jedyną alternatywą VS jest zdefiniowanie definicji preprocesora w Ustawieniach kompilacji dla nowej konfiguracji projektu i użycie tej konfiguracji w kompilacji.

Rozwiązaniem non MSBuild jest Utwórz stałe.plik cs i napisz narzędzie ustawień niestandardowych, które aktualizuje plik cs. Chciałbym, żeby było lepsze rozwiązanie, ale nie znalazłem żadnego.

 7
Author: Ritch Melton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-11 02:16:57

Jest to możliwe w przypadku projektów Unity. Tworzenie pliku o nazwie Mcs.rsp (odpowiednik. Net 3.5) lub
csc.rsp (odpowiednik. Net 4.0 )
in /Assets/ folder pozwala ci to zrobić.

Przykład : / Align = "left" / plik rsp zawiera:

-define:THIS_IS_MY_GLOBAL_PREPROCESSOR_CONSTANT
-define:ANOTHER_GLOBAL_PREPROCESSOR_CONSTANT

W projekcie, w dowolnym odtwarzaczu lub edytorze skrypt c#:

#if THIS_IS_MY_GLOBAL_PREPROCESSOR_CONSTANT
        Debug.Log("THIS_IS_MY_GLOBAL_PREPROCESSOR_CONSTANT is defined"); // compiles 
#else
        Debug.Log("THIS_IS_MY_GLOBAL_PREPROCESSOR_CONSTANT is not defined");
#endif
Testowane Na Unity 2019.1.2

Https://docs.unity3d.com/Manual/PlatformDependentCompilation.html

 0
Author: Levent Alpsal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-12 14:39:05

Począwszy od MSBuild 15.0, możesz użyć Directory.Buduj.właściwości do definiowania stałych w wielu projektach. https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build?view=vs-2019

Jest jak csproj, ale definiuje wartości, które będą miały zastosowanie do wszystkich CSPROJ w folderach potomnych.

Utwórz plik na górze drzewa folderów (aby zastosować do wszystkich dzieci csproj), o nazwie Katalog.Buduj.rekwizyty.

Dodaj:

<Project>
 <PropertyGroup>
   <DefineConstants>MaConstante</DefineConstants>
 </PropertyGroup>
</Project>
 0
Author: laperouse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-04 09:00:06