v11.0 \ WebApplications \ Microsoft.ebApplication.targets तब नहीं मिला जब फ़ाइल वास्तव में v10 का संदर्भ देती है


84

पहले कुछ पृष्ठभूमि। 2012 के अंत में हमने अपने vs2008 समाधान को vs2010 में स्थानांतरित कर दिया लेकिन हम अभी भी .NET 3.5 को लक्षित करते हैं। (मुझे नवीनतम और सबसे बड़ी बात के अलावा और कुछ नहीं पता है!)

इस सेटअप के साथ कुछ सप्ताह पहले तक हमारे पास कोई समस्या नहीं थी जब लोगों को ये त्रुटियां होने लगीं:

"foo.csproj" (Rebuild target) (16:5) ->
  C:\...\foo.csproj(142,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the declaration is correct, and that the file exists on disk.

दिलचस्प बात यह है कि यदि आप प्रोजेक्ट फाइल को देखते हैं तो यह v10 का संदर्भ देता है जो समझ में आता है क्योंकि हम विजुअल स्टूडियो 2012 का उपयोग नहीं करते हैं।

इस त्रुटि ने हम में से कई को एक बार और यहां तक ​​कि पुराने कोड शाखाओं पर भी मारा जो महीनों में नहीं बदले हैं।

मुझे संदेह है कि कुछ अद्यतन हमारी मशीनों पर धकेल दिए गए हैं जो भ्रमित करते हैं लेकिन मुझे नहीं पता कि इसके बारे में क्या करना है।

लघु अवधि के समाधान वीएस 2012 को स्थापित करने और इसका उपयोग नहीं करने के लिए किया गया है, लेकिन मैं उससे कुछ क्लीनर के लिए उम्मीद कर रहा हूं।


17
मैंने पाया है कि MSBuild कमांड लाइन में "/p:VisualStudioVersion=10.0" जोड़ने से यह दूर हो जाता है, लेकिन यह अभी भी एक हैक की तरह लगता है।
drs9222

जवाबों:


116

मैं विजुअल स्टूडियो 2013 के साथ एक ही मुद्दे में भाग गया। यह पता चला है कि मैं MSBuild के पुराने संस्करण का उपयोग कर रहा था - वह जो .NET फ्रेमवर्क वाले जहाज - कमांड लाइन से। Microsoft अब MSBuild को Visual Studio के भाग के रूप में और एक अलग इंस्टॉलर के रूप में भी जारी कर रहा है ( http://blogs.msdn.com/b/visualstudio/archive/2013/07/24/msbuild-is-now-part-of-of दृश्य-स्टूडियो.स्पेक्स )।

समाधान में स्थित MSBuild.exe के नए संस्करण का उपयोग करना था C:\Program Files (x86)\MSBuild\12.0\Bin। एक बार जब मैंने ऐसा किया, तो सभी लक्ष्य त्रुटियां गायब हो गईं।

EDIT 1

जैसा कि टिप्पणियों में बताया गया है, MSBuild का प्रत्येक नया संस्करण अपने साथ एक नई निर्देशिका लाता है। विज़ुअल स्टूडियो 2015 के लिए, उपयोग करें C:\Program Files (x86)\MSBuild\14.0\Bin

EDIT 2

जैसा कि टिप्पणियों में उल्लेख किया गया है, विज़ुअल स्टूडियो 2017 के लिए, उपयोग करें C:\Program Files (x86)\Microsoft Visual Studio\2017\<Edition>\MSBuild\15.0\Bin\MSBuild.exe


1
मैंने नए रास्ते को शामिल करने के लिए TeamCity फोरम पर एक अनुरोध पोस्ट किया (एक ला कैसे NuGet सेटिंग्स को संभाला जाता है)। उम्मीद है कि वे इससे जल्दी निपटेंगे।
डेविड पेडेन

1
अलग-अलग टूल डाउनलोड करने के लिए ब्लॉग पोस्ट में सीधा लिंक अब मान्य नहीं है। सही लिंक है: microsoft.com/en-us/download/details.aspx?id=40760
डेविड पेडेन

1
और, ठीक उसी तरह, Jetbrains संस्करण 8.0.5 के साथ बचाव में आता है। आधिकारिक ब्लॉग पोस्ट: teamcitydev.blogspot.com/2013/11/…
डेविड पेडन 18'13

1
यदि आपको स्थानीय पॉवर्सशेल बिल्ड स्क्रिप्ट मिली हैं, तो आप बस अपने रास्ते को जोड़ सकते हैं: $env:Path = $env:Path + ";C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications"और v4 msbuild का उपयोग करें (आप इसे अपने बिल्ड बॉक्स पर भी कर सकते हैं)
क्रिस एस

4
हाँ! धन्यवाद - यह उचित समाधान है।
जोश एम।

52

यदि आपके पास एक बिल्ड सर्वर है जिसमें VS2012 स्थापित नहीं है, तो आप इसे ठीक कर सकते हैं

a) अपने समाधान के लिए MSBuild.Microsoft.VisualStudio.Web.targets पैकेज स्थापित करना , और

b) .croroj फ़ाइल में इस पंक्ति को प्रतिस्थापित करना:

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

इस लाइन के साथ नगेट पैकेज की ओर इशारा करते हुए

<Import Project="..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets" Condition="true" />

संपादित करें

के रूप में अद्यतन लाइन में संस्करण बाहर @joedragons अंक nuget पैकेज संस्करण, यानी मैच चाहिए की जगह targets.11.0.2.1के साथ targets.x.x.x.xवर्तमान संस्करण के लिए।


1
इसी तरह, महान सलाह!
केविन ओबी

2
धन्यवाद, महान समाधान
पावेल

1
शायद स्पष्ट है, लेकिन आपके द्वारा प्रतिस्थापित लाइन में आपके द्वारा इंस्टॉल किए गए पैकेज का संस्करण होना चाहिए। मेरे द्वारा स्थापित किया गया 12.0.4 था, इसलिए जब मैंने प्रतिस्थापन आयात में रखा, तो मुझे वही त्रुटि मिली। जब मैंने ... Web.targets.12.0.4 \ ... सब अच्छा =) पर स्विच किया तो बहुत बहुत धन्यवाद!
joedragons

2
अब आपको इस उत्तर के भाग बी की आवश्यकता नहीं है। किसी कारण से SO ने अनावश्यक विवरणों को हटाने के लिए मेरे संपादन को अस्वीकार कर दिया है।
bbodenmiller

1
धन्यवाद मैंने पिछले संस्करण MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3 के साथ ऐसा ही किया
अहमद समीर

23

इस समस्या का एक सरल समाधान:

निम्नलिखित पथ पर जाएं:

C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio

आप अपने विजुअल स्टूडियो 2010, 2012 या 2013 के इंस्टॉल के आधार पर नवीनतम संस्करण V10.0, v11.0, v12.0 देखेंगे।

WebApplicationsया तो नवीनतम संस्करण निर्देशिका से फ़ोल्डर कॉपी करें और दूसरे पर पेस्ट करें।

आपके मुद्दों को हल किया जाना चाहिए।


1
यह IMO सबसे अच्छा और सरल उपाय है :)
गिदोन

बेशक, यह आवश्यक है कि आपके पास बिल्ड सर्वर पर ऐसा करने के लिए वास्तव में एक्सेस हो।
डेव

1
... लेकिन हमें मैन्युअल रूप से ऐसा क्यों करना है? धन्यवाद .. यह मेरे लिए VS21017 में तय किया (मेरे लिए यह केवल VS2017 के साथ ताजा स्थापित था - अब मुझे लगता है कि यह इसलिए था क्योंकि मैंने अभी तक IIS स्थापित नहीं किया है)
Piotr Kula

V14.0 की नकल करते समय भी काम करता है।
उवे कीम

12

मैंने पाया है कि फ्री विजुअल स्टूडियो 2012 शेल (आइसोलेटेड) को स्थापित करने के लिए WebApplications v11 MSBuild फाइलें स्थापित होती हैं। विजुअल स्टूडियो 2012 की पूर्ण स्थापना की तुलना में हल्का और कोई लाइसेंस चिंता नहीं।


8

वाह। हमने अभी-अभी अपनी बिल्ड मशीन पर ऐसा ही देखा था। हम VS2010 और लक्ष्य 4.0 का उपयोग करते हैं। हमारी परियोजना फाइलें इन लक्ष्यों के v10.0 संस्करण को स्पष्ट रूप से आयात करती हैं। कोड में कोई बदलाव नहीं होने के साथ, कल बिल्ड ठीक था और आज यह एक लापता v11.0 संस्करण के बारे में शिकायत के साथ विफल हो रहा है। .NET फ्रेमवर्क 4.5.1 स्वचालित निर्माण के रूप में इस बिल्ड मशीन पर कल रात स्थापित / अपडेट किया गया। हम पैरामीटर (या env। चर) के साथ v10.0 को मजबूर करने जा रहे हैं, लेकिन यह निश्चित रूप से हमें आश्चर्यचकित करता है ...

अद्यतन: और भी अजीब बात है, क्या ऐसा लगता है कि यह मामला बनता है कि आज का msbuild का संस्करण sln फ़ाइल की पहली पंक्ति का उपयोग करके यह निर्धारित करता है कि कौन सा VisualStudioVersion डिफ़ॉल्ट रूप से उपयोग करना है, जबकि कल का संस्करण नहीं था:

Format Version 12.00

हमने इसे मैन्युअल रूप से बदलकर 11.00 पर परीक्षण किया और बिल्ड ने फिर से काम करना शुरू कर दिया।

हमारे मामले में, भले ही हम 2010 / 4.0 के लिए सब कुछ लक्ष्य कर रहे हों और उसका निर्माण कर रहे हों, कुछ देव VS2012 के लिए तैयार हो रहे हैं (क्योंकि एमएस ने दावा किया है कि परियोजना की फाइलें संगत हैं), और यह विशेष समाधान अंतिम (महीनों पहले) बचा लिया गया था। VS2012। आज से पहले, यह एक समस्या पैदा नहीं कर रहा था।


1
इसने मुझे उच्चतम मतदान वाले उत्तर की तुलना में बहुत अधिक मदद की जो एक पूरी तरह से अलग स्थिति के बारे में लगता है।
लैम्ब्डाक्रूजर

यहाँ भी @LambdaCruiser के इस जवाब से काफी मदद मिली। मैंने अपनी .sln फ़ाइल के इतिहास को देखा और दूसरी पंक्ति # Visual Studio 2010को पहली पंक्ति में पढ़कर समाप्त कर दिया, Format Version 12.00जैसा कि मैंने कुछ समय पहले vs2012 में अपग्रेड किया था, लेकिन पीछे और पीछे vs2010 में बदल गया। वेन की तरह इस समस्या को सीआई सर्वर पर Windows अद्यतन चल रहा है के बाद हुई
वाल

6

मेरी भी यही समस्या थी। सूचीबद्ध समाधानों के ऊपर से गुजरकर तय किया गया। समस्या का कारण बनता है क्योंकि Visual Studio उपकरण (BuildTools) का उपयुक्त संस्करण बिल्ड सर्वर पर उपलब्ध नहीं है। जैसा कि ऊपर बताया गया है, इसे बिल्डटूल स्थापित करके हल किया जा सकता है लेकिन मेरे मामले में विकल्प नहीं है।

यहाँ एक और विकल्प है - नुगेट का उपयोग करें

Install-Package MSBuild.Microsoft.VisualStudio.Web.targets -Version 14.0.0.3

स्टार्ट अप प्रोजेक्ट की पहचान करें और उपयोग किए जा रहे विज़ुअल स्टूडियो के संस्करण के आधार पर web.targets स्थापित करें। निम्न फ़ाइलों को संशोधित किया जाएगा जिसमें आवश्यक परिवर्तन शामिल हैं

Package.config में:

<package id="MSBuild.Microsoft.VisualStudio.Web.targets" version="14.0.0.3" targetFramework="net45" />

.Csproj में:

<Import Project="..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3\build\MSBuild.Microsoft.VisualStudio.Web.targets.props" Condition="Exists('..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3\build\MSBuild.Microsoft.VisualStudio.Web.targets.props')" />

उम्मीद है की यह मदद करेगा!!! शुभ लाभ,

चीयर्स,


1
सही उत्तर - बिल्ड सर्वर पर चारों ओर से csproj फ़ाइल या चीजों की प्रतिलिपि बनाने की आवश्यकता को समाप्त करता है। विजुअल स्टूडियो और MSBuild 2017 के कई संस्करणों में काम किया। मैंने हालांकि "WebApplication.targets" लाइन को मैन्युअल रूप से हटा दिया है - nuget ने इसे स्वचालित रूप से नहीं हटाया।
गदास कुटका

3

हैक करें, लेकिन इसे कॉपी करके हल किया: c: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications *। \वेब अनुप्रयोग*।*


1

मुझे यह त्रुटि नवंबर के अंत में या तो मेरे TeamCity स्थापना या MSBuild स्थापना या स्रोत कोड के कॉन्फ़िगरेशन में कोई बदलाव किए बिना मिली। मेरे बिल्ड सर्वर पर Visual Studio भी स्थापित नहीं है, और VS2010 से VS2012 में परिवर्तन अगस्त के अंत में बिना किसी समस्या के किया गया था।

मेरा MSBuild संस्करण 4.0.30319.18408 है, मेरा बिल्ड सर्वर TeamCity v6.5.3 के साथ एक विंडोज सर्वर 2008 R2 SP1 है।

मैंने केवल दूसरे बिल्ड सर्वर से v11-folder की प्रतिलिपि बनाकर जारी किया, जो अप्रभावित था।

मेरा अनुमान है कि यह दो तरह से हो सकता है:

  1. कुछ अद्यतन किया गया था जिसने v11-folder को हटाने का काम शुरू किया। यह .NET या कुछ के लिए एक Windows अद्यतन हो सकता है?

  2. कुछ अद्यतन किया गया था जिसने v10 के उपयोग से v11 तक मेरी टीमसिटी / MSBuild विन्यास को बदल दिया और बिल्ड काम करना बंद कर दिया क्योंकि v11 कभी अस्तित्व में नहीं था।

मुझे 3 दिसंबर को .NET फ्रेमवर्क 4.5.1 का अपडेट मिला है, क्या इसका कारण हो सकता है?

Brgds

जोनास


0

मैं हाल ही में एक ही समस्या के साथ फंस गया हूँ। और मेरा निष्कर्ष यह है कि वीएस (वी 10, वी 11, वी 12) के हर संस्करण में बिल्ड वैरिएबल का मार्ग बदल जाता है, जैसे MSBuildBinPath

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

कुछ दुर्लभ मामलों में आपको वीएस और वेब डिप्लॉय पैकेज के विशिष्ट संस्करण को स्थापित करने की आवश्यकता हो सकती है। मेरे मामले में समस्या को हल करने के लिए सिर्फ संस्करण पर्याप्त था।


0

आप VisualStudioVersion गुण को इस तरह जोड़ सकते हैं:

<ItemGroup>
  <ProjectToBuild Include="$(MSBuildProjectDirectory)\..\MySolution.sln">
    <Properties>Configuration=$(BuildConfiguration);WarningLevel=0;VisualStudioVersion=12.0</Properties>
  </ProjectToBuild>
</ItemGroup>
<MSBuild Projects="@(ProjectToBuild)" Targets="Rebuild"/>

0

जैसा कि मैं खोज रहा था कि इस एक को कैसे हल किया जाए, लगभग सभी ने लापता MSBUILD फ़ोल्डर की प्रतिलिपि बनाने या किसी संस्करण के कुछ एसडीके को स्थापित करने की सिफारिश की।

सौभाग्य से, मुझे डोनोवन ब्राउन द्वारा यह अजीब सहायक पोस्ट मिली है: http://donovanbrown.com/post/So-sick-of-MicrosoftWebApplicationtargets-was-not-found-nerrers!

संक्षेप में, यह विचार है कि आपके द्वारा बनाई गई VisualStudio संस्करण को आपके बिल्ड परिभाषा में उपयोग करना चाहिए:

राइट क्लिक -> "एडिट बिल्ड डेफिनिशन ..."

"Procss" पर जाएं -> "3. Advanced"

और "MSBuild तर्क" के साथ सेट करें

/p:VisualStudioVersion=12.0

VS2019 में "एडिट बिल्ड डेफिनिशन डेफिनिशन ..." को नहीं पाया जा सकता है
Laser42
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.