在代码库中包含Nemerle编译器

时间:2012-10-31 11:36:46

标签: msbuild nemerle

我正在尝试将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>

在此更改之后,我可以从命令行脚本成功构建,但是我无法在Visual Studio中打开解决方案。打开解决方案时,VS会抱怨找不到MySolutionFolder\MyNemerleProjectFolder\.build\Nemerle\net-4.0\Nemerle.MSBuild.targets

为什么visual studio在项目文件夹下寻找.build目录而不是解决方案文件夹?有解决方法吗?

如果我将其更改为:

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

然后解决方案将在visual studio中打开,但构建失败 - 命令行构建也失败..

2 个答案:

答案 0 :(得分:3)

尝试使用$(MSBuildProjectDirectory)而不是$(ProjectDir)。 例如:

<Nemerle Condition=" '$(Bootstrapping)' == 'true' ">$(MSBuildProjectDirectory)\..\Boot\$(NemerleVersion)</Nemerle>
<Nemerle Condition=" '$(Bootstrapping)' == 'false' ">$(NemerleBinPathRoot)\$(NemerleVersion)</Nemerle>

答案 1 :(得分:2)

听起来像是Visual Studio中的一个错误。

您可以做的是指定一个预构建事件,该事件将create a symbolic link$(ProjectDir).build发送到$(SolutionDir).build

哈金,是的。