_copywebapplication مع تحويلات web.config
سؤال
أحاول نشر تطبيق الويب الخاص بي تلقائيًا عند تنفيذ إنشاء إصدار. أقوم بذلك باستخدام هدف _copywebapplication. أضفت ما يلي إلى ملف .csproj الخاص بي:
<!-- Automatically Publish in Release build. -->
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
<Target Name="AfterBuild">
<RemoveDir Directories="$(ProjectDir)..\Output\MyWeb" ContinueOnError="true" />
<MSBuild Projects="MyWeb.csproj" Properties="Configuration=Release;WebProjectOutputDir=$(ProjectDir)..\Output\MyWeb;OutDir=$(ProjectDir)bin\" Targets="ResolveReferences;_CopyWebApplication" />
</Target>
هذا يعمل ولكن مع قضية واحدة. الفرق بين هذا الإخراج ، والإخراج الذي تم إنشاؤه عند استخدام عنصر قائمة النشر في Visual Studio ، هو أن تحويل web.release.config لا يتم تطبيقه على ملف web.config عند استخدام طريقة msBuild. بدلاً من ذلك ، يتم نسخ Web.Config و Web.Release.Config و Web.Debug.config.
أي أفكار موضع تقدير.
المحلول
لقد ضربت رأسي على الحائط لهذا الغرض. بعد المشي لمسافات طويلة من خلال أهداف MSBuild ، صادفت شيئًا "غير شفاف".
قصة قصيرة طويلة: حاول استخدام الجديد _WPPCopyWebApplication
. إنه يعمل على جهازي. القديم _CopyWebApplication
لا يدعم التحولات لأسباب قديمة. هذا ما افعله:
msbuild /t:Rebuild /p:OutDir=..\publish\;Configuration=Release;UseWPP_CopyWebApplication=True;PipelineDependsOnBuild=False MvcApplication1\MvcApplication1.csproj
# UseWPP_CopyWebApplication = true requires PipelineDependsOnBuild = false
قصة طويلة:
القي نظرة على VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets
. إنه خاطئ للغاية. يجد _CopyWebApplication
في السطر 70. التعليق هو:
أصبح _copywebapplication الأصلي الآن إرثًا ، ولا يزال بإمكانك استخدامه عن طريق تعيين $ (usewpp_copywebapplication) ل حقيقي. بشكل افتراضي ، يتغير الآن لاستخدام هدف _wppcopywebapplication في microsoft.web.publish.targets. يسمح بالاستفادة من web.config trsnaformation. [كل كذا
اه أوه. UseWPP_CopyWebApplication
الإعدادات الافتراضية إلى False (السطر 27) وهو أمر منطقي إذا كنت لا تريد كسر الموجود _CopyWebApplication
. لذا فإن تعيينه على True سيستخدم بالفعل الأشياء الجديدة WPP التي تم تقديمها إلى VS 2010. أنا أفضل ذلك على استدعاء الهدف "المخفي".