MSBuild项可以使用目标设置的属性吗?

问题描述 投票:0回答:1

我正在尝试通过MSBuild实现以下目标:我的主项目(MyProject.csproj)应该包含几个Reference项,但是到这些Reference之一的路径是SomeProperty属性的值,由目标设置。具体来说,使用SomeProperty从文件中解析ReadLinesFromFileTask的值。

这是ReadLinesFromFileTask的高级结构:

MyProject.csproj

很遗憾,此设置无法正常工作。我在VS Solution Explorer的<Project> <Target Name="CreateSomeProperty"> <!-- Tasks that ultimately set $(SomeProperty) by parsing a value with ReadLinesFromFileTask --> </Target> <ItemGroup> <Reference Include="$(SomeProperty)" /> <!-- Other Reference items --> </ItemGroup> </Project> Dependencies节点下看到了那些小的黄色三角形,因为该项目正在寻找缺少字符的路径中的DLL。同样,在构建项目时,即使我仍然在Target内看到MyProject任务的输出,也会遇到一堆The type or namespace name could not be found错误。估计Message目标在执行阶段正在运行,在CreatePathProperty项目在评估阶段已无法加载之后。

是否有办法进行这样的设置?我尝试在Reference元素中设置BeforeTargets="Build",并在Target元素中设置InitialTargets="CreateSomeProperty",但似乎没有任何效果。任何帮助将不胜感激!

c# visual-studio msbuild csproj msbuild-task
1个回答
0
投票
MSBuild项可以使用目标设置的属性吗?

是的,我确定这是可能的,而您想要的是VS2017中受支持的方案。

Tips:

通常Project在执行自定义目标之前先读取msbuildProperties。因此,我们应该使用类似Items的方法来确保在这种情况下正确的顺序是BeforeTargets="BeforeResolveReferences"

否则顺序(custom target runs=>create the property=>msbuild reads the info about references and the property或其他顺序错误的顺序应为:BeforeTargets="Build"

解决方案:

Msbuild reads the info about references(now the property is not defined yet)=>the target runs and creates the property
© www.soinside.com 2019 - 2024. All rights reserved.