我使用 CoApp 创建了一个 nuget 包来打包一些代码生成器(二进制文件)。我希望能够在 msbuild custombuild 步骤中使用这些代码生成器来生成代码
我有一个定义以下内容的目标文件(使用 CoApp)
<SetEnv Condition="'$(Platform.ToLower())' == 'x64' And '$(PlatformToolset.ToLower())' == 'v100' And ( $(Configuration.ToLower().IndexOf('debug')) == -1 )" Name="PATH" Prefix="true" Value="$(MSBuildThisFileDirectory)../..//build/native/bin/x64\v100\Release;">
<Output TaskParameter="OutputEnvironmentVariable" PropertyName="PATH" />
</SetEnv>
包含此代码段的目标文件像这样导入项目(vcxproj 文件)
<Import Project="..\packages\habitat.id.redist.1.0.0.5\build\native\habitat.id.redist.targets" Condition="Exists('packages\habitat.id.1.0.0.1\build\native\habitat.id.targets')" />
项目内
<Exec Command="echo %PATH%"/>
返回期望的结果,即采取形式的结果
../..//build/native/bin/x64\v100\Release;C:\
所以我可以调用我想从项目中运行的可执行文件。(除了与 custombuild 命令步骤不同,没有 . 的概念outputs
。因此增量构建将不起作用)
然而
<CustomBuild Include="..\directory\filename">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
echo $(PATH)
</Command>
不包含通过 SetEnv 设置的我想要的路径。
我想这样做,以便可以在自定义构建步骤中调用通过 nuget 打包的代码生成器。
我了解command
内部custombuild
运行/在新 cmd 中运行,并且环境是通过设置的用户或系统环境继承的。此外,我可以使用 启动 Msbuild /p:useenv
,从而泵出我想要的任何环境。在我看来,这/p:useenv
相当于硬编码路径 - 提前知道它。
我希望能够更新我的包并运行,即我希望项目管理路径,因为它是在导入的目标文件中定义的。