如何将目标中生成的内容部署到带有MSBuild的UWP应用程序中的AppX包中

我有一个在Visual Studio 2017中创建的C#XAML UWP项目,我有一些资源需要转换并部署到AppX包中。但是,我无法直接将其转换资产部署到AppXPackagePayload中。如何将目标中生成的内容部署到带有MSBuild的UWP应用程序中的AppX包中

我已经在RawData文件夹中用香草C#XAML应用程序和几个文本文件创建了一个简化的测试用例。我希望将文本文件转换(现在已复制)并部署到我的AppX中的Data文件夹。

我加了Xaml.CSharp.targets进口前右下面我的csproj(我说只是为了调试ConvertedData项目类型):

<ItemGroup> 

<RawData Include="RawData\**\*.*" />

</ItemGroup>

<Target Name="ConvertData" BeforeTargets="Compile" Inputs="@(RawData)" Outputs="Data\%(RawData.RecursiveDir)%(RawData.Filename)%(RawData.Extension)">

<ItemGroup>

<ConvertedData Include="Data\%(RawData.RecursiveDir)%(RawData.Filename)%(RawData.Extension)" />

<Content Include="Data\%(RawData.RecursiveDir)%(RawData.Filename)%(RawData.Extension)" />

</ItemGroup>

<Message Importance="high" Text="Creating Data: @(RawData) -> Data\%(RawData.RecursiveDir)%(RawData.Filename)%(RawData.Extension)" />

<Copy SourceFiles="%(RawData.Identity)" DestinationFiles="Data\%(RawData.RecursiveDir)%(RawData.Filename)%(RawData.Extension)" />

</Target>

<Target Name="DisplayContent" AfterTargets="ConvertData" BeforeTargets="Compile">

<Message Importance="high" Text="RawData: @(RawData)" />

<Message Importance="high" Text="ConvertedData: @(ConvertedData)" />

<Message Importance="high" Text="Content: @(Content)" />

</Target>

日志输出时的建筑是这样的:

1> Creating Data: RawData\Hello.txt -> Data\Hello.txt 

1> Creating Data: RawData\World.txt -> Data\World.txt

1> RawData: RawData\Hello.txt;RawData\World.txt

1> ConvertedData: Data\Hello.txt;Data\World.txt

1> Content: Properties\Default.rd.xml;Assets\LockScreenLogo.scale-200.png;Assets\SplashScreen.scale-200.png;Assets\Square150x150Logo.scale-200.png;Assets\Square44x44Logo.scale-200.png;Assets\Square44x44Logo.targetsize-24_altform-unplated.png;Assets\StoreLogo.png;Assets\Wide310x150Logo.scale-200.png;Data\Hello.txt;Data\World.txt

这是预期的。我现在有一个Data文件夹在我的项目文件夹中包含我的“转换”文本文件。但是,即使将应用程序部署为内容,但在部署应用程序时,文件夹中的文件也不会将其放到AppX文件夹中。目标中未生成的所有其他资产都已部署。看起来好像在目标中创建的内容项不会被添加到AppXPackagePayload中。

如果我添加以下目标公司的ItemGroup:

<AppxPackagePayload Include="Data\%(RawData.RecursiveDir)%(RawData.Filename)%(RawData.Extension)"> 

<TargetPath>Data\%(RawData.RecursiveDir)%(RawData.Filename)%(RawData.Extension)</TargetPath>

</AppxPackagePayload>

然后在数据文件夹中的项目将部署到AppX中。但是,我觉得只需将我的项目添加到目标中的内容就足以实现部署。难道我做错了什么?

谢谢!

回答:

内容项目的处理在编译之前发生的,所以你应该

BeforeTargets="AssignTargetPaths"

这应该做的伎俩取代

BeforeTargets="Compile"

回答:

我现在有一个工作解决方案,它可以避免目标生成的内容项以及明确的AppXPackagePayload。这是有效的,因为我在我的RawDataData文件之间有一对一映射,所以我可以将所有内容项目放在目标之外。它并没有回答为什么目标生成的内容项目没有被部署(我仍然想知道为什么有人知道这就是这种情况),但它确实以一种干净的方式解决了我的问题,所以可能对其他人有用:现在

<ItemGroup> 

<RawData Include="RawData\**\*.*">

<Visible>True</Visible>

</RawData>

</ItemGroup>

<ItemGroup>

<Content Include="@(RawData-> 'Data\%(RecursiveDir)%(Filename)%(Extension)')">

<Visible>True</Visible>

</Content>

</ItemGroup>

<Target Name="ConvertData" BeforeTargets="Compile" Inputs="@(RawData)" Outputs="Data\%(RawData.RecursiveDir)%(RawData.Filename)%(RawData.Extension)">

<Copy SourceFiles="%(RawData.Identity)" DestinationFiles="Data\%(RawData.RecursiveDir)%(RawData.Filename)%(RawData.Extension)" />

</Target>

数据文件都在我的项目文件夹中创建,并正确地部署到AppX中的文件夹。

以上是 如何将目标中生成的内容部署到带有MSBuild的UWP应用程序中的AppX包中 的全部内容, 来源链接: utcz.com/qa/267246.html

回到顶部