2016-08-11 30 views
10

पर इशारा करते हुए "fullTrustProcess" के साथ ऐप पैकेज बनाने में त्रुटि, मैं यूडब्ल्यूपी एप्लिकेशन के साथ एप सर्विसेज ब्रिजिंग के लिए नमूना आवेदन को तैनात करने की कोशिश कर रहा हूं। नमूना चलता है और ठीक बनाता है लेकिन जब मैं पूरी चीज को पैकेज करने के लिए गाइड का पालन करने का प्रयास करता हूं तो यह मुझे एक त्रुटि देता है।निष्पादन योग्य

Link to the packaging guide

AppService Bridge Sample repository here.

त्रुटि संदेश:

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. 

मैं कोड-टुकड़ा त्रुटि पैदा पाया है, लेकिन मैं नहीं अभी तक इसके लिए एक ठीक पाया है है।

अगर मैं फ़ाइल Package.appxmanifest से निम्नलिखित कोड को दूर , दृश्य स्टूडियो सफलतापूर्वक पैकेज बनाता है:

<Extensions> 
    <uap:Extension Category="windows.appService"> 
    <uap:AppService Name="CommunicationService" /> 
    </uap:Extension> 
    <desktop:Extension Category="windows.fullTrustProcess" Executable="BackgroundProcess.exe" /> 
</Extensions> 

लेकिन यह स्पष्ट रूप से भी प्रक्रिया है जो पूरी है ब्रिजिंग निकाल देंगे इस अभ्यास का बिंदु।

यह कुछ हद तक इस सवाल का संबंधित प्रतीत होती है लेकिन फर्क मैं एक .exe है और उस सवाल .dlls के लिए यह जवाब देने के लिए लगता है:

Error when building universal app for the store: "Manifest references file 'MyAppName.dll' which is not part of the payload."

(अपडेट कर रहा है UWP उपकरण इसे ठीक नहीं लग रहा था।)

उत्तर

5

मैं यहां पोस्ट कर रहा हूं क्योंकि मुझे कई घंटों की जांच के बाद अपना जवाब मिला। उम्मीद है कि यह भविष्य में दूसरों की मदद करेगा!

तो समस्या यह है कि पैकेज बनाने के दौरान ProjectProcess.exe प्रोजेक्ट में शामिल नहीं है। प्रोजेक्ट में कौन सी फाइलों को शामिल किया जाना है .csproj फ़ाइल में परिभाषित किया गया है।

<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> 

कुछ इस तरह करने के लिए::

<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> 

ध्यान दें कि मैं जोड़ लिया है उसे अपनी पसंदीदा पाठ संपादक में खोल

जोड़ें जहां संपत्ति परिभाषित कर रहे हैं (से पहले दृश्य स्टूडियो बंद करने के लिए याद) AppServiceBridgeSample .BackgroundProcces.exe फ़ाइल का नामस्थान गधा है। मुझे नहीं पता कि यह पूरी तरह से जरूरी है, लेकिन इस तरह मैंने इसे ठीक किया है। तो नेमस्पेस को ठीक करने के लिए आपको सभी कक्षाओं से पहले AppServiceBridgeSample जोड़ना होगा। और पृष्ठभूमि के तहत पृष्ठभूमि प्रोजेक्ट प्रोजेक्ट के गुणों में भी> विधानसभा का नाम & डिफ़ॉल्ट नामस्थान एक्सटेंशन जोड़ता है।

उदाहरण वर्ग:

namespace AppServiceBridgeSample.BackgroundProcess 
{ 
    class Program 
    { 
    .... 
    } 
} 

और .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> 

इसके अलावा इस स्वत: त्रुटि मैं हो रही थी ठीक नहीं होती है, तो आप भी एक बिल्ड घटना जोड़ने के लिए, राइट क्लिक BackgroundProcess (VS में प्रोजेक्ट)> गुण> ईवेंट बनाएं> पोस्ट-बिल्ड इवेंट कमांड लाइन के अंतर्गत जोड़ें:

xcopy /y /s "$(TargetPath)" "$(SolutionDir)UWP" 

समाधान बनाएं और तैनात करें और AppServiceBridgeSample.BackgroundProcess.exe फ़ाइल UWP प्रोजेक्ट रूट (फ़ाइल एक्सप्लोरर में दृश्यमान) में मौजूद होना चाहिए।

इसके अलावा, मैंने इस जांच के दौरान विजुअल स्टूडियो 15 एंटरप्राइज़ पूर्वावलोकन 3 में अपडेट किया है, अगर आपको अन्य त्रुटियों का सामना करना पड़े तो शायद कुछ हद तक मदद मिलेगी।

+0

मैंने आपके चरणों का पालन किया है लेकिन फिर भी मैं एप्लिकेशन को तैनात नहीं कर सका। यदि आपने अभी भी सक्षम समाधान तैनात किया है। क्या आप ऑनलाइन साझा कर सकते हैं। – Harsha

1

मुझे नहीं पता कि यह इस पर वजन करने में बहुत देर हो चुकी है, लेकिन मैं कुछ ऐसा करने की कोशिश करने की प्रक्रिया में हूं। (एक PowerShell.exe चल रहा है) एक यूडब्ल्यूपी ऐप से। और यह किसी अन्य व्यक्ति द्वारा Desktop Bridged apps से संबंधित एक लिंक था।

आपके मामले में। मैं आपको लिंक से एमएस डॉक के पहले पैराग्राफ पर इंगित कर रहा हूं ...

पैकेज.appxmanifest फ़ाइल पर राइट क्लिक करें और कोड देखें। एक बार एक्सएमएल फ़ाइल के अंदर सुनिश्चित करें कि आप पैकेज नाम

 <Package 
     ... 
     xmlns:uap2="http://schemas.microsoft.com/appx/manifest/uap/windows10/2" 
     xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3" 
     xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10" 
     ... 
     IgnorableNamespaces="uap uap2 uap3 mp rescap desktop"> 
6

पर निम्न नाम रिक्त स्थान जोड़ते हैं, तो मुझे पैकेज निर्माण कार्य मिल रहा है। काफी हताश होने से पहले मैंने सी #+ कंसोल का उपयोग सी # के बजाय करने की कोशिश की, जैसा कि AppServiceBridgeSample_C++ नमूना में है। मुझे केवल Win32Process_CPP.exe फ़ाइल को यूडब्लूपी प्रोजेक्ट में जोड़ना था और इसे ContentCopy if newer ध्वज के साथ चिह्नित करना था। उसके बाद ऐप पैकेज बनाएं ऑपरेशन सफल होता है। लेकिन सी ++ कंसोल को सी # एक में वापस बदलने में बस असफलता हुई - काफी अजीब!

जैसा कि मैंने पाया है, मुख्य समस्या यह जाना जाता है और वर्णित docs में:

आप अपने अनुप्रयोग पैकेज एक सी # परियोजना का उपयोग करना पसंद करते हैं, तो आपको निम्न ज्ञात समस्याओं की पता होना चाहिए:

यूडब्ल्यूपी परियोजना के रूट फ़ोल्डर में संग्रहीत Win32 बैनरीज रिलीज में हटा दिए जाते हैं। यदि आप अपने Win32 बाइनरी को स्टोर करने के लिए किसी फ़ोल्डर का उपयोग नहीं करते हैं, तो .NET मूल संकलक अंतिम पैकेज से उन्हें हटा देगा, जिसके परिणामस्वरूप निष्पादन योग्य प्रविष्टि बिंदु नहीं मिल सकता है। इस मुद्दे पर

समाधान सरल था:

  1. UWP परियोजना जड़ में एक निर्देशिका (जैसे Win32) बनाएँ। यह वह स्थान है जहां कंसोल बाइनरी (BackgroundProcess.exe) रखा जाना है।

    तो आप उदा।c:\test\AppServiceBridgeSample\cs\UWP\win32

  2. संपादित Package.appxmanifest में desktop:Extension तत्व - Executable विशेषता मान के लिए फ़ोल्डर जोड़ें:

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

  3. अपने UWP परियोजना के लिए नव निर्मित फ़ोल्डर से BackgroundProcess.exe द्विआधारी जोड़ें। इसकी गुणों में BuildActionContent और Copy to Output Directory से Copy if newer पर विशेषता सेट करें।

पैकेज अब बनाया जाना चाहिए।

नोट: आपके द्वारा बनाए गए पैकेज के साथ AppCertKit (Wack) चलाते हैं, तो कारण rescap नाम स्थान का उपयोग कर (जो माइक्रोसॉफ्ट और इसकी सहयोगी विक्रेताओं के लिए आरक्षित है केवल, here देखें) करने के लिए विफलता मिल सकता है। असुरक्षित बाइनरी के कॉल के कारण BinaryAnalyzer.AppContainerCheck शायद असफल हो जाएगा।

+0

इस समाधान के लिए बहुत धन्यवाद। बहुत आसान और प्रभावी। – Caesar

संबंधित मुद्दे