我创建了一个构建任务,可以为其使用的项目动态生成文件。 我设法将该文件复制到$(TargetDir)中,但不能复制到AppX文件夹中。我需要它的原因是,这个构建任务是关于单元测试的,并且在测试中需要这个文件。
听起来有点混乱所以我试着澄清一下:
我在该任务中生成代码并将其编译成一个程序集,我将其添加为主程序集(在本例中为test.dll)的引用。那么接下来发生的事情是我在" AfterCompile"目标和我的程序集生成到obj \ Debug文件夹中。 这是我的目标:
<UsingTask TaskName="MyBuildTask" AssemblyFile="MyBuildTask.dll"/>
<Target
AfterTargets="AfterCompile"
Name="MyBuildTarget">
<MyBuildTask
SolutionRoot="$(SolutionDir)"
GeneratedAssemblyPath="$(IntermediateOutputPath)$(TargetName).Generated.dll"
TestProjectPath="$(ProjectPath)"
TestAssemblyPath="@(IntermediateAssembly)"
>
<Output TaskParameter="GeneratedFile" ItemName="GeneratedFile"/>
</MyBuildTask>
<ItemGroup>
<Content Include="@(GeneratedFile)">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<DeploymentContent>true</DeploymentContent>
</Content>
</ItemGroup>
</Target>
其中一个,我也不想要的是,这个文件现在被复制到\ bin \ Debug \ obj \ Debug。
我显然可以静态地指定它,以便它总是被复制到输出路径根然后再复制到AppX文件夹,如果没有其他任何我可以做的话,我只想把它作为我的最后一个解决方案。
那么如何将我的文件放到这个GetCopyToOutputDirectoryItems
中,我认为它是输出目录和AppX包的项目列表?
答案 0 :(得分:2)
我实际上经过连续8小时的关于该主题的进一步研究后发现并通过Microsoft.Common.targets和Microsoft.AppxPackage.targets解决了我的问题的所有目标文件大量阅读:
<ItemGroup>
<AppxPackagePayload Include="@(GeneratedAssemblyFullPath)" Condition="@(AppxPackagePayload) != '' Or @(AppxPackagePayload) != '*Undefined*'">
<TargetPath>@(GeneratedFile)</TargetPath>
</AppxPackagePayload>
</ItemGroup>
这会将文件添加到AppxPackagePayload,因此它将被复制到Appx包中。
PS:因为我对此有点困惑。@(GeneratedFile)
和@(GeneratedAssemblyFullPath)
是我自己的构建任务和类型“string”的输出,就像名称所示。 @(GeneratedFile)
只是文件名,因此它将被放入根目录。
答案 1 :(得分:-1)
您是否尝试从GeneratedAssemblyPath中删除$(IntermediateOutputPath),我相信这就是生成\ bin \ Debug \ obj \ Debug的原因。它正在将该文件路径复制到OutputDirectory(通常类似于\ bin \ Debug。