5

मैं एक समाधान मैं इस सवाल में पाया का उपयोग कर अपने प्रोजेक्ट अनुकूलित:क्लिक-एक बार प्रकाशित addtional फ़ाइलों वी.एस. के साथ बंद कर दिया 2012

Why doesn't ClickOnce in Visual Studio deploy content files from dependent assemblies?

<ItemGroup> 
<AdditionalPublishFile Include="$(OutputPath)\**\*.rpt"> 
    <Visible>False</Visible> 
</AdditionalPublishFile> 
</ItemGroup> 
<Target Name="BeforePublish"> 
    <Touch Files="@(IntermediateAssembly)" /> 
    <CreateItem Include="@(AdditionalPublishFile)" AdditionalMetadata="TargetPath=%(RecursiveDir)%(Filename)%(extension);IsDataFile=false"> 
    <Output TaskParameter="Include" ItemName="_DeploymentManifestFiles" /> 
    </CreateItem> 
</Target> 

यह, VS 2010 के साथ ठीक काम कर रहा था जब तक मैं करने के लिए उन्नत वीएस 2012, अतिरिक्त फाइलें एप्लीकेशन मेनिफेस्ट में शामिल नहीं थीं !! इसलिए जब उपयोगकर्ता एप्लिकेशन इंस्टॉल करता है, तो निर्दिष्ट फाइलें मुख्य मुख्य फ़ोल्डर से अनुपलब्ध थीं।

वीएस 2012 में क्या बदल गया है? या शायद एमएसबिल्ड में बदलाव हैं?

संपादित करें:

मैं मूल प्रश्न जहां से मैं विचार आया, मूल रूप से मैं कुछ विधानसभाओं लोड करने के लिए निर्भरता इंजेक्शन का उपयोग कर रहा है, जिसका अर्थ अपने प्रोजेक्ट और विधानसभाओं के बीच कोई मुश्किल संदर्भ नहीं है उल्लेख किया है, तो क्लिक-एक बार तैनाती उन असेंबली पर विचार नहीं करेगी, जो मुझे परियोजना में जोड़ने के लिए मजबूर करती हैं, या उल्लिखित समाधान का उपयोग करने के लिए, मैंने उल्लिखित समाधान चुना क्योंकि यह अदृश्य और आसान है।

लेकिन यह मैं आपके सवाल का चौंकाने क्योंकि मैं कभी नहीं देखा है किसी को भी पहले ClickOnce के साथ ऐसा करते हैं, तो मैं इसके बारे में माइक्रोसॉफ्ट पर ClickOnce पुरुष से बात पाया वी.एस. 2012

+0

क्यों MSBuild के बारे में सभी सवालों कि ध्यान की ज्यादा नहीं ले करता है ?? –

+0

खुशी मुझे यह पोस्ट मिला - मैं इस विधि को लागू करने वाला था - http://blogs.msdn.com/b/mwade/archive/2008/06/29/how-to-publish-files-which-are-not -in-the-project.aspx – tofutim

+0

@tofutim आपको यह काम करने के लिए कैसे मिला, यह समाधान एमएसबिल्ड के साथ मेरे लिए काम नहीं करता था। –

उत्तर

1

की ओर पलायन के बाद टूट गया था। उन्होंने कहा कि आप जो कर रहे हैं वह समर्थित नहीं है, इसलिए ऐसा कुछ नहीं है जिसके लिए उन्होंने परीक्षण किया होगा। एमएसबिल्ड में कई बदलाव हैं जो आप जो कर रहे हैं उसे तोड़ सकते थे।

क्या आप जो करने की कोशिश कर रहे हैं वह तैनाती में शामिल माध्यमिक संदर्भ से जुड़ी फाइलें प्राप्त कर रहा है? दूसरे शब्दों में, आपके पास एक मुख्य प्रोजेक्ट है जो दूसरी परियोजना बनाने के द्वारा बनाई गई एक और असेंबली का संदर्भ देता है, और दूसरी असेंबली में सामग्री फाइलें हैं, और आप उन्हें अपनी परियोजना में शामिल करना चाहते हैं?

यदि आप यही करने की कोशिश कर रहे हैं, तो आपको उन फ़ाइलों को मुख्य परियोजना में जोड़ने पर विचार करना चाहिए। ऐसा करने के लिए, आप एक मौजूदा आइटम को एक लिंक के रूप में जोड़ सकते हैं, और दूसरी परियोजना में सामग्री को इंगित कर सकते हैं। फिर जब आप पहली परियोजना बनाते हैं तो सामग्री शामिल की जाएगी।

+0

धन्यवाद रॉबिन, मैंने सोचा कि कोई भी इस सवाल को नहीं देखेगा :), मैंने अधिक जानकारी जोड़ने के लिए अपना प्रश्न संपादित किया, हालांकि, मैंने सुझावों के अनुसार असेंबली को जोड़ने की कोशिश नहीं की, लेकिन मुझे लगता है कि यह जोड़ने के समान है सीधे परियोजना के लिए असेंबली (उन्हें संदर्भित नहीं)। –

+0

यह वही नहीं है, क्योंकि जब आप असेंबली से लिंक करते हैं, तो जब आप उन्हें बनाते हैं तो यह नया संस्करण उठाएगा। यदि आप उन्हें प्रोजेक्ट में कॉपी करते हैं और वहां संदर्भ जोड़ते हैं, तो वे तब तक अपडेट नहीं होते जब तक आप उन्हें अपडेट नहीं करते। – RobinDotNet

+2

ऐसा लगता है कि क्लिकऑन और वीएस दूसरी असेंबली से सामग्री फ़ाइलों को पहचानने में सममित होना चाहिए। – tofutim

1

ले जाएँ BeforeBuild चरण पर CreateItem कार्य और टच कार्य निकालें:

<ItemGroup> 
    <AdditionalPublishFile Include="$(OutputPath)\**\*.rpt"> 
    <Visible>False</Visible> 
    </AdditionalPublishFile> 
</ItemGroup> 
<Target Name="BeforeBuild"> 
    <CreateItem Include="@(AdditionalPublishFile)" AdditionalMetadata="TargetPath=%(RecursiveDir)%(Filename)%(extension);IsDataFile=false"> 
    <Output TaskParameter="Include" ItemName="_DeploymentManifestFiles" /> 
    </CreateItem> 
</Target>