1

我正在尝试创建一个构建脚本,它允许我指定特定网站中包含的“模块项目”的路径列表。

因此,我有这样的布局:

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" />

它实际上包含在“卫星”项目组中。

4

1 回答 1

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>

我需要在目标中创建一个属性(在它之外它没有飞行,因为它仍然包含通配符),然后使用该属性在我的项目列表中包含使用通配符的文件,否则它将是带有通配符的路径在其中,然后复制命令也不起作用。

于 2011-09-13T14:34:00.487 回答