我正在尝试根据目录中的以下约定搜索一组程序集:
{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