3

Nemerleコンパイラをソースコードリポジトリに含めて、ビルドサーバーにNemerleをインストールせずにビルドできるようにしようとしています。現在、私のソースコードディレクトリは次のようになっています。

- [MySolutionFolder]
--- [.build]
------ [Nemerle]
--------- [net-4.0]
------------ ncc.exe
------------ ncc32.dll
------------ Nemerle.dll
------------ Nemerle.MSBuild.targets
------------ { all other Nemerle requirements }
--- [MyNemerleProjectFolder]
------ MyNemerleProject.nproj
------ { various .n files }
--- MySolution.sln
--- build.bat

build.batファイルは、.slnファイルでMSBuildを呼び出す単純なスクリプトです。

.nprojファイルで、行を変更しました

<Nemerle Condition=" '$(Nemerle)' == '' ">$(NemerleBinPathRoot)\$(NemerleVersion)</Nemerle>

に:

<Nemerle Condition=" '$(Nemerle)' == '' ">$(SolutionDir).build\Nemerle\$(NemerleVersion)</Nemerle>

この変更後、コマンドラインスクリプトから正常にビルドできますが、VisualStudioでソリューションを開くことができません。ソリューションを開くと、VSは見つからないと文句を言いますMySolutionFolder\MyNemerleProjectFolder\.build\Nemerle\net-4.0\Nemerle.MSBuild.targets

Visual Studioがソリューションフォルダーではなくプロジェクトフォルダーの下に.buildディレクトリを探すのはなぜですか?これに対する回避策はありますか?

次のように変更した場合:

<Nemerle Condition=" '$(Nemerle)' == '' >$(ProjectDir)..\.build\Nemerle\$(NemerleVersion)</Nemerle>

その後、ソリューションはVisual Studioで開きますが、ビルドは失敗します。コマンドラインビルドも失敗します。

4

2 に答える 2

3

$(ProjectDir)の代わりに$(MSBuildProjectDirectory)を使用してみてください。例えば:

<Nemerle Condition=" '$(Bootstrapping)' == 'true' ">$(MSBuildProjectDirectory)\..\Boot\$(NemerleVersion)</Nemerle>
<Nemerle Condition=" '$(Bootstrapping)' == 'false' ">$(NemerleBinPathRoot)\$(NemerleVersion)</Nemerle>
于 2012-11-01T20:36:03.863 に答える
2

VisualStudioのバグのように聞こえます。

できることは、ビルド前のイベントを指定することです。これにより、からへのシンボリックリンクが作成されます。$(ProjectDir).build$(SolutionDir).build

ハッキー、はい。

于 2012-11-01T09:57:51.520 に答える