标签: itemgroup

在基于 MSBuild/约定的文件名生成中删除尾部斜杠

我正在尝试根据目录中的以下约定搜索一组程序集:

{SubDirName}\{SubDirName}.dll
Run Code Online (Sandbox Code Playgroud)

我首先创建了一个 MSBuild ItemGroup [通过在 .RecursiveDir 部分批处理另一个 ItemGroup]。

<AllAssemblies Include="$(SourceDirectory)\**\Test.*.dll" />
<Dirs Include="@(AllAssemblies->'%(RecursiveDir)')"/>
Run Code Online (Sandbox Code Playgroud)

每个项目都有一个斜杠,即:

<Message Text="@(Dirs)"/>
Run Code Online (Sandbox Code Playgroud)

说:

SubDir1\;SubDir2\;SubDir3\
Run Code Online (Sandbox Code Playgroud)

现在,我想从这个列表中生成一组文件名。

问题在于:

<AssembliesByConvention Include="@(Dirs -> '%(Identity)\%(Identity).dll')" />
Run Code Online (Sandbox Code Playgroud)

产生:

SubDir1\\SubDir1\.dll;SubDir2\\SubDir2\.dll;SubDir3\\SubDir3\.dll
Run Code Online (Sandbox Code Playgroud)

我不想在.dll.

实现这一目标的最干净的方法是什么?

我知道有一个 HasTrailingSlash 表达式运算符,但是在 OOTB Tasks? 中没有 RemoveTrailingSlash 任务的迹象。我对所需的 MSBuild 版本并不挑剔。

msbuild conventions convention-over-configur itemgroup

5
推荐指数
1
解决办法
1856
查看次数

如果定义了 itemchange() 则无法将项目添加到项目组 (PyQt)

我正在构建一个 PyQt QGraphicsView 项目,其中一些 QGraphicItems 可以在不同的 QGraphicsItemGroups 之间移动。为此,我使用“新”父项组的 addItemToGroup() 方法。

这工作正常,但前提是我没有在自定义子项类中定义 itemChange() 方法。一旦我定义了该方法(即使我只是将函数调用传递给超类),无论我如何尝试,子项都不会添加到 ItemGroups 中。

class MyChildItem(QtGui.QGraphicsItemGroup):
    def itemChange(self, change, value):
        # TODO: Do something for certain cases of ItemPositionChange
        return QtGui.QGraphicsItemGroup.itemChange(self, change, value)
        #return super().itemChange(change, value)   # Tried this variation too
        #return value   # Tried this too, should work according to QT doc
Run Code Online (Sandbox Code Playgroud)

我是否太愚蠢而无法在Python中正确调用超类方法,或者问题出在QT / PyQT魔法中的某个地方?

我使用 Python 3.3 以及 PyQt 4.8 和 QT 5。

python qt pyqt itemgroup

5
推荐指数
1
解决办法
459
查看次数

在目标中的ItemGroup中引用元数据定义中的已知项元数据

这是一个MSBuild脚本:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="AugmentItemGroup" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
 <ItemGroup> 
   <ItmGrp Include="File1.txt">
       <Dest>dest\%(FileName)%(Extension)</Dest> 
   </ItmGrp>
   <ItmGrp Include="File2.txt">
       <Dest>dest\%(FileName)%(Extension)</Dest> 
   </ItmGrp>
   <ItmGrp Include="File3.txt">
       <Dest>dest\%(FileName)%(Extension)</Dest> 
   </ItmGrp>
  </ItemGroup>

   <Target Name="AugmentItemGroup">
     <ItemGroup>
      <ItmGrp Include="File4.txt">
        <Dest>dest\%(FileName)%(Extension)</Dest> 
      </ItmGrp>          
     </ItemGroup>
     <Message Text="%(ItmGrp.FullPath) to %(ItmGrp.Dest)" />
   </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

我期望它的输出是:

  D:\t\File1.txt to dest\File1.txt
  D:\t\File2.txt to dest\File2.txt
  D:\t\File3.txt to dest\File3.txt
  D:\t\File4.txt to dest\File4.txt
Run Code Online (Sandbox Code Playgroud)

但结果是:

  D:\t\File1.txt to dest\File1.txt
  D:\t\File2.txt to dest\File2.txt
  D:\t\File3.txt to dest\File3.txt
  D:\t\File4.txt to dest\File1.txt
  D:\t\File4.txt to dest\File2.txt
  D:\t\File4.txt to dest\File3.txt
Run Code Online (Sandbox Code Playgroud)

%(FileName)%(Extension)当ItemGroup在目标内时,为什么众所周知的元数据引用的行为是不同的?

是否有可能在目标内部获得"目标外"行为?

msbuild metadata target msbuild-4.0 itemgroup

3
推荐指数
1
解决办法
1564
查看次数

在MSBuild中创建一个字符串的ItemGroup

我想创建一个任意字符串/名称的"ItemGroup",以便使用MSBuild转换,例如:

<ItemGroup>
    <Categories>First</Categories>
    <Categories>Second</Categories>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

然后,我希望将这些类别的转换传递到控制台应用程序,例如:

/c @(Categories, ' /c ')
Run Code Online (Sandbox Code Playgroud)

我在引号中说"ItemGroup"的原因是因为我不确定它是否适用于我以这种方式使用ItemGroups - 据我所知,文档中没有任何内容表明ItemGroups 必须是文件,但由于缺少必需的"包含"属性,因此在错误消息中使用上述结果.

  • 有没有办法使用ItemGroups执行上述操作?
  • 或者,有没有更好的方法来实现上述不使用ItemGroups?

msbuild itemgroup

0
推荐指数
1
解决办法
2083
查看次数