繁体   English   中英

将MSBuild任务中动态生成的文件添加到输出和appx文件夹

[英]Add dynamically generated file in MSBuild task to output and appx folders

我已经创建了一个构建任务,可以为它所使用的项目动态生成一个文件。我已经设法将该文件复制到$(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包的项目列表?

我实际上经过连续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)只是文件名,所以它将被放入根目录。

您是否尝试从GeneratedAssemblyPath中删除$(IntermediateOutputPath),我相信这就是产生\\ bin \\ Debug \\ obj \\ Debug的原因。 它将该文件路径复制到OutputDirectory(通常类似于\\ bin \\ Debug。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM