使用指向可执行文件的"fullTrustProcess"创建应用程序包时出错

Mat*_*ias 14 c# xaml uwp windows-10-universal desktop-bridge

我正在尝试使用UWP应用程序部署示例应用程序以桥接AppServices.该示例运行并构建得很好但是当我尝试按照指南打包整个事情时它给了我一个错误.

链接到包装指南

这里是AppService Bridge示例存储库.

错误信息:

 Error Manifest validation error: Line 36, Column 64, Reason: The file name  "BackgroundProcess.exe" declared for element "*[local-name()='Applications']/*[local-name()='Application']/*[local-name()='Extensions']/*[local-name()='Extension' and @Category='windows.fullTrustProcess']" doesn't exist in the package.
Run Code Online (Sandbox Code Playgroud)

我发现代码片段生成错误,但我还没有找到它的修复程序.

如果我从文件Package.appxmanifest中删除以下代码,Visual studio将成功构建包:

<Extensions>
  <uap:Extension Category="windows.appService">
    <uap:AppService Name="CommunicationService" />
  </uap:Extension>
  <desktop:Extension Category="windows.fullTrustProcess" Executable="BackgroundProcess.exe" />
</Extensions>
Run Code Online (Sandbox Code Playgroud)

但这显然也会消除过程中的桥接,这是本练习的重点.

这似乎与这个问题有些相关,但不同之处在于我有一个.exe,而这个问题似乎是为.dll解答的:

为商店构建通用应用程序时出错:"清单引用文件'MyAppName.dll',它不是有效负载的一部分."

(更新UWP工具似乎没有解决它.)

kib*_*rCZ 8

我似乎让包创建工作.我已经非常绝望了,我尝试使用C++控制台而不是C#,就像AppServiceBridgeSample_C++示例一样.我只需要将Win32Process_CPP.exe文件添加到UWP项目并将其标记为Content带有Copy if newer标志.之后,Create App Packages操作成功.但只是简单地将C++控制台改回C#控制台再次导致失败 - 非常奇怪!

正如我所发现的,主要问题是已知的并在文档中描述:

如果您更喜欢使用C#项目打包应用程序,则需要了解以下已知问题:

存储在UWP项目的根文件夹中的Win32二进制文件将在Release中删除.如果您不使用文件夹来存储Win32二进制文件,.NET Native编译器将从最终包中删除它们,从而导致清单验证错误,因为找不到可执行入口点.

这个问题的解决方案很简单:

  1. 在UWP项目根目录中创建一个目录(例如win32).这是必须放置控制台binary(BackgroundProcess.exe)的地方.

    所以你得到了例如 c:\test\AppServiceBridgeSample\cs\UWP\win32

  2. 编辑desktop:Extension元素Package.appxmanifest- 将文件夹添加到Executable属性值:

    <desktop:Extension Category="windows.fullTrustProcess" Executable="win32\BackgroundProcess.exe" />

  3. BackgroundProcess.exe将新创建的文件夹中的二进制文件添加到UWP项目中.在它的属性设置BuildAction属性ContentCopy to Output DirectoryCopy if newer.

现在应该创建包.

注意:如果使用创建的包运行AppCertKit(WACK),则可能由于使用rescap命名空间(仅为Microsoft及其合作伙伴供应商保留,请参见此处)而失败.的BinaryAnalyzer.AppContainerCheck可能也将失败,因为调用不受保护的二进制的.


Mat*_*ias 7

我在这里发帖是因为经过几个小时的调查后我找到了自己的答案.希望这将有助于未来的其他人!

所以问题是构建包时BackgroundProcess.exe不包含在项目中.在.csproj文件中定义了要包含在项目中的文件.在首选的文本编辑器中打开它(请记得先关闭Visual Studio)

添加定义资产的位置:

<ItemGroup>
  <Content Include="Properties\Default.rd.xml" />
  <Content Include="Assets\LockScreenLogo.scale-200.png" />
  <Content Include="Assets\SplashScreen.scale-200.png" />
  <Content Include="Assets\Square150x150Logo.scale-200.png" />
  <Content Include="Assets\Square44x44Logo.scale-200.png" />
  <Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
  <Content Include="Assets\StoreLogo.png" />
  <Content Include="Assets\Wide310x150Logo.scale-200.png" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

对于这样的事情:

<ItemGroup>
  <Content Include="Properties\Default.rd.xml" />
  <Content Include="Assets\LockScreenLogo.scale-200.png" />
  <Content Include="Assets\SplashScreen.scale-200.png" />
  <Content Include="Assets\Square150x150Logo.scale-200.png" />
  <Content Include="Assets\Square44x44Logo.scale-200.png" />
  <Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
  <Content Include="Assets\StoreLogo.png" />
  <Content Include="Assets\Wide310x150Logo.scale-200.png" />
  <Content Include="AppServiceBridgeSample.BackgroundProcess.exe">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </Content>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

请注意,我已经添加了AppServiceBridgeSample .BackgroundProcces.exe来确定文件的命名空间.我不知道这是否完全必要,但这就是我修复它的方法.因此,要修复命名空间,必须在所有类之前添加AppServiceBridgeSample.并且还在Application> Assembly name&Default namespace下的BackgroundProcess项目的属性中添加扩展名.

示例类:

namespace AppServiceBridgeSample.BackgroundProcess
{
    class Program
    {
    ....
    }
}
Run Code Online (Sandbox Code Playgroud)

.xaml例如:

<Page
  x:Class="AppServiceBridgeSample.UWP.MainPage"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="using:AppServiceBridgeSample.UWP"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  x:Name="Main"
  mc:Ignorable="d">
  ...
</Page>
Run Code Online (Sandbox Code Playgroud)

此外,这不会自动修复我遇到的错误,您还必须添加一个构建事件,右键单击BackgroundProcess(VS中的项目)>属性>构建事件>在Post-Build事件命令行下添加:

xcopy /y /s "$(TargetPath)" "$(SolutionDir)UWP"
Run Code Online (Sandbox Code Playgroud)

构建和部署解决方案,AppServiceBridgeSample.BackgroundProcess.exe文件应存在于UWP项目根目录中(在文件资源管理器中可见).

此外,我在此次调查期间更新了Visual Studio 15 Enterprise Preview 3,如果您遇到其他错误,也可能会有所帮助.