2014-10-30 91 views
0

我只有我的其他项目的名称/位置,但我不想要求开发人员自己添加项目依赖关系。 所以我的prebuild事件需要通过某种msbuild魔术添加“引用”(=使当前项目依赖于另一个的任何东西)。 这可能吗?如何使我的项目通过msbuild依赖于其他项目?

期望中的伪代码:

<Task Name="MyOwnPrebuild"> 
    <AddProjectDependencies ItemGroup="@MyProjectPaths" /> 
</Task> 

在那里我会通过iteratating在我的窗口充满了@MyProjectPaths阵列递归文件夹中的一些其他任务调用此人之前。

+0

这是不可能的。标准鸡与鸡蛋,当MSBuild决定开始运行预生成事件时,它已经计算出依赖关系。试图再次更改它们不起作用。不要隐藏依赖关系,客户端程序员在遇到问题时不会有机会找出错误。 – 2014-10-30 12:30:09

+0

“到MSBuild决定开始运行预生成事件时,它已经计算出依赖”至少从查看Common.CurrentVersion.targets中的CoreBuild它不应该是真正的你说的ResolveReferences;在PreBuildEvent之后。 – Blub 2014-10-30 12:32:26

+0

.targets文件中的一个或多个订单不相关。你可以很容易地自己推理出来,如果没有必要的话,MSBuild确实不会构建任何东西。当然,在开始执行任何操作之前,它需要知道依赖关系是否发生了变化,包括运行预生成事件。 – 2014-10-30 12:37:34

回答

0

在我的特定情况下,有(幸运!)一个太简单的,但美丽的答案:

<ItemGroup> 
    <ProjectReference Include="..\**\*.csproj"> 
    <Private>false</Private> 
    </ProjectReference> 
</ItemGroup> 

这包括所有子文件夹我的所有项目(?)!在这个特殊情况下我确实需要什么。如果我想限制到特定类型的项目,我可以轻松使用更具体的正则表达式。

+0

对其他人的警告:不知何故,Visual Studio似乎试图变得“聪明”并为我扩展。似乎没有发生在每一个版本,所以我不得不看这个。 – Blub 2014-11-05 10:12:20

相关问题