Visual Studioソリューションベースで#define Constant
する方法はありますか?
Csprojectベースで定数を定義でき、csファイルに#define constant
を入れることができますが、vsslnベースで定義できるかどうか疑問に思います。
実際には、一般的なプロジェクト設定でRitchのアプローチのバリエーションを使用できます。基本的に、ソリューション内の各プロジェクトファイルの末尾に1つの変更を加える必要があります。
<PropertyGroup Condition="'$(SolutionDir)' == '' or
'$(SolutionDir)' == '*undefined*'">
<SolutionDir>..\..\</SolutionDir>
</PropertyGroup>
<Import Project="$(SolutionDir)CommonSettings.targets" />
</Project>
次に、CommonSettings.targetsを定義して、ソリューション全体の設定を含めることができます。
<Project xmlns="http://schemas.Microsoft.com/developer/msbuild/2003"
ToolsVersion="3.5">
<PropertyGroup>
<TacoBuild>true</TacoBuild>
</PropertyGroup>
</Project>
各プロジェクトですでに定義されているプロジェクト設定をオーバーライドまたはマージする場合を除いて、基本的にはこれで終わりです。以下のリンクでは、これを行う方法について詳しく説明しています。
http://www.ademiller.com/blogs/tech/2007/12/common-project-settings-for-your-visual-studio-solution/
これを行うための別のアプローチがあります:
グローバル設定ファイルを編集します。たとえば、私の場合は.netcf2.0なので、$(MSBuildBinPath)\Microsoft.compactframework.csharp.targets
です。
次の行を追加します。
<Import Project="$(SolutionDir)CommonSettings.targets" Condition="exists('$(SolutionDir)CommonSettings.targets')" />
これは、MSBuildにCommonSettings.targetsがソリューションフォルダーに存在するかどうかをインポートするように指示するためです。
ソリューションフォルダーの下にCommonSettings.targetsを作成します。
たとえば、ABCシンボルを定義するには:
<Project DefaultTargets="Build" xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DefineConstants>$(DefineConstants);ABC</DefineConstants>
</PropertyGroup>
</Project>
間接的にあります。フラグを使用して環境変数を設定し、VSを実行する場合:
set TacoBuild=true
devenv.eve bigproject.sln
または、コマンドラインからMSBuildを起動します。
msbuild /p:TacoBuild=true
.csprojファイルで、PropertyGroupを追加する必要があります。
<PropertyGroup Condition="'$(TacoBuild)'=='true'">
<DefineConstants>$(DefineConstants);TacoBuild</DefineConstants>
</PropertyGroup>
コードには、プリプロセッサdefが必要です。
#if TacoBuild
const int myConst = 42;
#endif
VSのみの代替手段は、新しいプロジェクト構成のビルド設定でプリプロセッサー定義を定義し、その構成をビルドで使用することです。
MSBuild以外のソリューションは、constants.csファイルを作成し、csファイルを更新するカスタム設定ツールを作成することです。より良い解決策があればいいのですが、見つかりませんでした。
MSBuild 15.0以降では、Directory.Build.propsを使用して、複数のプロジェクトの定数を定義できます。 https://docs.Microsoft.com/en-us/visualstudio/msbuild/customize-your-build?view=vs-2019
これはcsprojに似ていますが、子フォルダー内のすべてのcsprojに適用される値を定義します。
Directory.Build.propsという名前のファイルをフォルダーツリーの一番上に作成します(すべての子csprojに適用します)。
追加:
<Project>
<PropertyGroup>
<DefineConstants>MaConstante</DefineConstants>
</PropertyGroup>
</Project>
これはUnityプロジェクトで可能です。というファイルを作成する
mcs.rsp(.Net 3.5と同等のものを対象とする)または
csc.rsp(.Net 4.0と同等のものを対象とする)
/Assets /フォルダーで、それを行うことができます。
例:/Assets/csc.rspファイルには次のものが含まれます。
-define:THIS_IS_MY_GLOBAL_PREPROCESSOR_CONSTANT
-define:ANOTHER_GLOBAL_PREPROCESSOR_CONSTANT
プロジェクトでは、任意のプレーヤーまたはエディターの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
Unity2019.1.2でテスト済み
https://docs.unity3d.com/Manual/PlatformDependentCompilation.html