2011-02-01 20 views
15

का उपयोग कर मैं MSDeploy के माध्यम से अपनी पैकेजिंग/तैनाती प्रक्रिया के हिस्से के रूप में एक आदेश चलाने की कोशिश कर रहा हूं। विशेष रूप से, मैं अपने डीएलएल में से एक के खिलाफ installutil चलाकर एक कस्टम इवेंट लॉग बनाने की कोशिश कर रहा हूं, लेकिन मुझे सापेक्ष पथ को डीओएल पर तैनाती निर्देशिका से निर्दिष्ट करने में समस्या हो रही है। प्रारंभ करने के लिए, मैंने अपनी मैनिफ़ेस्ट फ़ाइल के अंदर runCommand प्रदाता उत्पन्न करने के लिए नीचे दिए गए कॉन्फ़िगर को मेरे csproj में जोड़ा। कृपया डीएलएल के लिए पूर्ण पथ नोट करें।MSDeploy runCommand सापेक्ष पथ

<PropertyGroup> 
    <!-- Extends the AfterAddIisSettingAndFileContentsToSourceManifest action to create Custom Event Log --> 
    <IncludeEventLogCreation>TRUE</IncludeEventLogCreation> 
    <AfterAddIisSettingAndFileContentsToSourceManifest Condition="'$(AfterAddIisSettingAndFileContentsToSourceManifest)'==''"> 
     $(AfterAddIisSettingAndFileContentsToSourceManifest); 
     CreateEventLog; 
    </AfterAddIisSettingAndFileContentsToSourceManifest> 
    </PropertyGroup> 
    <Target Name="CreateEventLog" Condition="'$(IncludeEventLogCreation)'=='TRUE'"> 
    <Message Text="Creating Event Log" /> 
    <ItemGroup> 
     <MsDeploySourceManifest Include="runCommand"> 
     <path>installutil C:\inetpub\wwwroot\MyTestApp\bin\BusinessLayer.dll</path> 
     </MsDeploySourceManifest> 
    </ItemGroup> 
    </Target> 
    <ItemGroup> 

MSBuild बुला के बाद, इस सही ढंग से मेरी प्रकट उत्पन्न मेरी package.zip के अंदर। जब मैं MyTestApp.deploy.cmd/वाई भाग गया इसे सही ढंग से msdeploy कहा जाता है और \ wwwroot \ MyTestApp Inetpub करने के लिए अपने फ़ाइलों को तैनात किया है और नीचे प्रकट से मेरे आदेश भागा:

<runCommand path="installutil C:\inetpub\wwwroot\MyTestApp\bin\BusinessLayer.dll ... etc 

समस्या मैं कर रहा हूँ मुझे क्या करना है इस डीएलएल पथ को c: \ inetpub \ आदि को हार्डकोड नहीं करना चाहते हैं। डिफ़ॉल्ट वेब साइट के तहत मेरी तैनाती निर्देशिका से सापेक्ष पथ का उपयोग करके उपरोक्त कॉल कैसे कर सकता हूं? आदर्श रूप में, मैं इस पथ को लेने के लिए MSDeploy चाहूंगा और DLL को खोजने के लिए इसे चलाने के लिए एक चर के रूप में पास कर दूं। तो मैं कुछ लिख सकता था: <path>installutil $DeploymentDir\NewTestApp\bin\BusinessLayer.dll</path> हार्ड कोडिंग में एक पूर्ण पथ को कड़ी-कोड करने के बारे में चिंता किए बिना।

क्या हर बार मेरे डीएलएल के पूर्ण पथ का उपयोग किए बिना ऐसा करने का कोई तरीका है?

उत्तर

1

मुझे एहसास है कि यह वह जवाब नहीं है जिसे आप शायद सुनना चाहते थे, लेकिन इस तरह मैं इसके आसपास हो गया।

हमने गंतव्य सर्वर पर एक पावरहेल स्क्रिप्ट बनाई है। तो बजाय अपने आदेश चलाने का:

installutil C:\inetpub\wwwroot\MyTestApp\bin\BusinessLayer.dll ... etc 

हम चल पाएंगे:

c:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe d:\powershell\installSites.ps1 siteName <NUL 

"sitename" powershell स्क्रिप्ट में कोई पैरामीटर के रूप में भेजी जा रही है। स्क्रिप्ट के अंदर यह उस गंतव्य सर्वर पर जानता है जो फ़ाइलों को स्थापित करने के लिए, किसी भी आदेश को चलाने की आवश्यकता है, रीसायकल करने के लिए ऐप पूल, आदि

फिर से, एक सापेक्ष पथ खोजने जितना आसान नहीं है, लेकिन यह काम करता है।

<PropertyGroup> 
<DeploymentDir Condition="'$(Configuration)'=='Release' AND '$(DeploymentDir)'==''">Release Deployment Dir</DeploymentDir> 
<DeploymentDir Condition="'$(Configuration)'=='Debug' AND '$(DeploymentDir)'==''">Debug Deployment Dir</DeploymentDir> 
<DeploymentDir Condition="'$(DeploymentDir)'==''">C:\inetpub\wwwroot</DeploymentDir> 
<AplicationName Condition="'$(Configuration)'=='Release' AND '$(AplicationName)'==''">NewTestApp</AplicationName> 
<AplicationName Condition="'$(Configuration)'=='Debug' AND '$(AplicationName)'==''">MyTestApp</AplicationName> 
<ApplicationDeploymentDir Condition="'$(ApplicationDeploymentDir)'==''">$(DeploymentDir)\$(ApplicationName)\bin</ApplicationDeploymentDir> 
</PropertyGroup> 

इन शर्तों अपने निर्माण प्रणाली में निर्माण प्रक्रिया पर पूरा नियंत्रण लेने के लिए कमांड लाइन से सब कुछ बदल करने की अनुमति देगा:

+1

उपयोग कर सकते हैं यह कुछ हद तक एक आधिकारिक सिफारिश होने के लिए, भी लगता है: http://social.msdn.microsoft.com/Forums/en/msbuild/थ्रेड/1044058c-f762-456b-8a68-b0863027ce47 –

4

आप कार्रवाई आप ऊपर लिखा था साथ .csproj को DeploymentDir की परिभाषा में जोड़ सकते हैं या लिपि।

MSBuild.exe yourproj.proj /p:Configuration=Release /p:DeploymentDir=D:\package /p:ApplivationName=BestAppForever 

और अपने कार्य के अंदर आप इसे

<ItemGroup> 
    <MsDeploySourceManifest Include="runCommand"> 
    <path>installutil $(ApplicationDeploymentDir)\BusinessLayer.dll</path> 
    </MsDeploySourceManifest> 
</ItemGroup> 
+4

यह केवल बिल्ड समय पर निर्दिष्ट परिनियोजन डीआईआर के लिए काम करेगा। लेकिन एक बार तैनाती पैकेज एक उत्पादन वेबसाइट पर तैनात किया जा रहा है, जो जानता है कि लक्ष्य मशीन पर भौतिक तैनाती निर्देशिका क्या होगी। –