我正在尝试根据目录中的以下约定搜索一组程序集:
{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 版本并不挑剔。
我正在构建一个 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。
这是一个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在目标内时,为什么众所周知的元数据引用的行为是不同的?
是否有可能在目标内部获得"目标外"行为?
我想创建一个任意字符串/名称的"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 必须是文件,但由于缺少必需的"包含"属性,因此在错误消息中使用上述结果.
itemgroup ×4
msbuild ×3
conventions ×1
metadata ×1
msbuild-4.0 ×1
pyqt ×1
python ×1
qt ×1
target ×1