我正在尝试创建一个构建脚本,该脚本允许我指定特定网站中包含的“模块项目”的路径列表。
因此,我有这个布局:
customer folder
|_MainProject
|_ModuleProject1
|_ModuleProject2
所以,基本上我希望能够指定一个包含ModuleProject1和2的ItemGroup,并将相关文件复制到MainProject中。
<ItemGroup>
<CustomModule Include="ModuleProject1\*.csproj" />
<CustomModule Include="ModuleProjec2\*.csproj" />
</ItemGroup>
在我的主构建脚本中,我想查找我的附属程序集的路径,以及驻留在项目的obj \ Release * .dll文件夹中的所有dll。
我已经有项目文件(.csproj)的项目组,所以基本上我只想添加一些文件引用。但我无法弄清楚我会怎么做。这就是我今天所拥有的:
<Satellites Include="$(ReferencesFolder)\??\*.dll" />
<Satellites Include="$(SiteRoot)\bin\??\*.dll" />
<Satellites Include="%(CustomModule.RelativeDir)obj\$(Configuration)\??\*.dll" />
我如何根据我所拥有的事实制作最后一行?
这样做时:
<Message Text="%(CustomModule.RelativeDir)obj\$(Configuration)\??\*.dll" />
输出:
ModuleProject1\obj\Release\??\*.dll
ModuleProject2\obj\Release\??\*.dll
如果有人通过好例子与MSBuild的基础知识有一些链接,我会非常感激。我总是最终在msdn上看到了一些非常神秘的例子,并没有真正解释过很多。
编辑:我修改了我的计划并且几乎让它工作了,但是包含并没有像我期望的那样真正起作用。没有包含任何内容,但有文件可供使用。如果我手动添加:
<Satellites Include="ModuleProject1\obj\Release\??\*.dll" />
它实际上包含在“卫星”项目组中。
答案 0 :(得分:1)
我自己找到了一个解决方案,似乎我需要一个解决方法才能明确地工作。
由于我无法根据其他项目列表添加项目,这就是我最终提出的内容:
<Target Name="BuildModules">
<!-- We do this because we need a property with the correct wildcards, otherwise it won't work -->
<PropertyGroup>
<CustomModuleSatellites>@(CustomModule->'%(RelativeDir)obj\$(Configuration)\??\*.dll')</CustomModuleSatellites>
</PropertyGroup>
<ItemGroup>
<Satellites Include="$(CustomModuleSatellites)" />
</ItemGroup>
</Target>
我需要在Target中创建一个属性(在它之外它没有飞,因为它仍然包含通配符),然后使用该属性ti包含我的项目列表中使用通配符的文件,否则它将是带有通配符的路径,然后复制命令也不起作用。