क्या MSBuild के बाहर web.configs तैयार करने के लिए माइक्रोसॉफ्ट के एक्सएमएल दस्तावेज़ ट्रांसफॉर्म का उपयोग करना संभव है? मैं MSSuild इंजन के माध्यम से इसे चलाने के बिना इन परिवर्तनों को करने के लिए PowerShell का उपयोग करना चाहता हूं। यदि माइक्रोसॉफ्ट ने मानक एक्सएसएलटी का इस्तेमाल किया था तो PowerShell में करना आसान होगा। जो मैं बता सकता हूं उससे मुझे अपने सी: \ प्रोग्राम फ़ाइलें (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll का उपयोग करना होगा जिसके लिए एक बिल्ड इंजन की आवश्यकता है। धन्यवादवेब। कॉनफिग माइक्रोसॉफ्ट एमएसबिल्ड के बाहर बदलता है?
उत्तर
मैंने PowerShell में माइक्रोसॉफ्ट के एक्सएमएल दस्तावेज़ ट्रांसफॉर्म को संभालने के लिए एक छोटा सा फ़ंक्शन बनाया।
मैंने विजुअल स्टूडियो बिल्ड फ़ोल्डर से माइक्रोसॉफ्ट.Web.XmlTransform.dll फ़ाइल को मेरी स्क्रिप्ट के पथ पर कॉपी किया है, लेकिन यदि आप चाहें तो आप इसे स्रोत फ़ोल्डर से संदर्भित कर सकते हैं।
function XmlDocTransform($xml, $xdt)
{
if (!$xml -or !(Test-Path -path $xml -PathType Leaf)) {
throw "File not found. $xml";
}
if (!$xdt -or !(Test-Path -path $xdt -PathType Leaf)) {
throw "File not found. $xdt";
}
$scriptPath = (Get-Variable MyInvocation -Scope 1).Value.InvocationName | split-path -parent
Add-Type -LiteralPath "$scriptPath\Microsoft.Web.XmlTransform.dll"
$xmldoc = New-Object Microsoft.Web.XmlTransform.XmlTransformableDocument;
$xmldoc.PreserveWhitespace = $true
$xmldoc.Load($xml);
$transf = New-Object Microsoft.Web.XmlTransform.XmlTransformation($xdt);
if ($transf.Apply($xmldoc) -eq $false)
{
throw "Transformation failed."
}
$xmldoc.Save($xml);
}
web.release.config का उपयोग कर web.config को बदलने के लिए:
XmlDocTransform("Web.config", "Web.Release.config")
परिवर्तन का तर्क ट्रांसफॉर्मएक्सएल कार्य के अंदर ही है। यदि आप इसे कोड से कॉल करना चाहते हैं तो आपको एमएसबील्ड एपीआई को नकली इंजन के साथ उपयोग करना होगा और इसे निष्पादित करना होगा। यदि आप चाहें तो मेरे पास इसके लिए कुछ कोड है।
आपके मामले में जब आपने PowerShell का उल्लेख किया है तो सबसे अच्छा काम यह है कि ट्रांसफॉर्मएक्सएल कार्य को आमंत्रित करने के लिए केवल एक रैपर MSBuild फ़ाइल बनाएं। मैं यह इसलिए कहता हूं क्योंकि PowerShell को .NET 2.0 के अंतर्गत चलाने के लिए कॉन्फ़िगर किया गया है, लेकिन TransformXml कार्य को .NET 4.0 की आवश्यकता है। इसे एक डमी एमएसबिल्ड फ़ाइल से कॉल करने के लिए आप http://sedodream.com/2010/04/26/ConfigTransformationsOutsideOfWebAppBuilds.aspx पर अपना ब्लॉग देख सकते हैं, लेकिन मैंने नीचे दिए गए लिंक से एक नमूना चिपकाया है।
<Project ToolsVersion="4.0" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="TransformXml"
AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
<Target Name="Demo">
<TransformXml Source="app.config"
Transform="Transform.xml"
Destination="app.prod.config"/>
</Target>
</Project>
धन्यवाद सैयद, मैं वास्तव में अपने समाधान के साथ चला गया। मैंने इसे 3 आइटमों के लिए प्रॉपर्टी ग्रुप को शामिल करने के लिए थोड़ा सा संशोधित किया, इसलिए मैं उन लोगों को पावरशेल से कमांड लाइन पर ओवरराइड कर सकता था। सीखा है कि आपकी किताब :) '
एक MSDeploy का उपयोग कर के बाद से यह PowerShell स्क्रिप्टिंग API शामिल हैं को बदलने और अपने पैकेज को तैनात करने की अनुमति है को देखा लें।
आप XML-Document-Transform पर भी देख सकते हैं, यदि आप चाहते हैं कि आप ट्रांसफॉर्म करने के लिए अपना कोड लिख सकें।
यहां एक कोडप्लेक्स प्रोजेक्ट है जो कुछ ऐसा ही करता है। XDT Transformation Tool
मिशेल के जवाब के आधार पर मैं एक सी # समारोह है कि एक ही पूरा होगा लिखा था।
बेशक आप और मामले किसी में इसलिए यहाँ यह है PowerShell के साथ परिणामी DLL आह्वान सकता है, लेकिन मैं वास्तव में एक पूरी तरह से programatic संस्करण के लिए देख रहा था, इसी तरह के समाधान की तलाश में है:
using Microsoft.Web.XmlTransform;
...
public static void TransformConfig(string configFileName, string transformFileName)
{
var document = new XmlTransformableDocument();
document.PreserveWhitespace = true;
document.Load(configFileName);
var transformation = new XmlTransformation(transformFileName);
if (!transformation.Apply(document))
{
throw new Exception("Transformation Failed");
}
document.Save(configFileName);
}
आप होगा
बस निम्नलिखित के संदर्भ में शामिल करने की ज़रूरतC: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ वेब \ Microsoft.Web.XmlTransform.dll
शानदार उत्तर, इसके लिए अधिक वोट चाहिए! – Matt
माइक्रोसॉफ्ट ने एक्सडीटी को कोडप्लेक्स http://xdt.codeplex.com पर और एक NuGet पैकेज https://www.nuget.org/packages/Microsoft.Web.Xdt/ के रूप में पोस्ट किया है। मैंने एमएसबिल्ड कार्य, ट्रांसफॉर्मएक्सएमएल और एक .exe के साथ एक NuGet सुअर भी बनाया है ताकि उन्हें https://www.nuget.org/packages/SlowCheetah.Xdt/1.1.6-beta का आह्वान किया जा सके।
पावरशेल के लिए मैंने एक स्वयं-बूटस्ट्रैपिंग स्क्रिप्ट बनाई है जिसे आप https://gist.github.com/sayedihashimi/f1fdc4bfba74d398ec5b का उपयोग कर सकते हैं।
http://sedodream.com/2014/07/22/StopCheckinginBinariesInsteadCreateSelfbootstrappingScripts.aspx पर स्वयं बूटस्ट्रैपिंग स्क्रिप्ट के बारे में अधिक जानकारी।
मैंने स्क्रिप्ट को पावरहेल के नवीनतम संस्करण के साथ काम करने के लिए थोड़ा सा अद्यतन किया और इसे थोड़ा आसान बना दिया।
function XmlDocTransform($xml, $xdt)
{
$scriptpath = $PSScriptRoot + "\"
$xmlpath = $scriptpath + $xml
$xdtpath = $scriptpath + $xdt
if (!($xmlpath) -or !(Test-Path -path ($xmlpath) -PathType Leaf)) {
throw "Base file not found. $xmlpath";
}
if (!($xdtpath) -or !(Test-Path -path ($xdtpath) -PathType Leaf)) {
throw "Transform file not found. $xdtpath";
}
Add-Type -LiteralPath "$PSScriptRoot\Microsoft.Web.XmlTransform.dll"
$xmldoc = New-Object Microsoft.Web.XmlTransform.XmlTransformableDocument;
$xmldoc.PreserveWhitespace = $true
$xmldoc.Load($xmlpath);
$transf = New-Object Microsoft.Web.XmlTransform.XmlTransformation($xdtpath);
if ($transf.Apply($xmldoc) -eq $false)
{
throw "Transformation failed."
}
$xmldoc.Save($xmlpath);
Write-Host "Transformation succeeded" -ForegroundColor Green
}
और आह्वान करने के लिए समारोह का उपयोग
XmlDocTransform "App.config" "App.acc.config"
- 1. वेब के बाहर एसएमटीपी संग्रहीत करना। कॉनफिग फ़ाइल
- 2. वेब के साथ कई आइटम डालने। कॉनफिग
- 3. वेब में कस्टम सेक्शन/संग्रह। कॉनफिग
- 4. मशीन कहां है। कॉनफिग?
- 5. वेब में Assemblies नोड का उद्देश्य क्या है। कॉनफिग?
- 6. एएसपीनेट वेब में jsonSerialization maxJsonLength सेटिंग। कॉनफिग 500 त्रुटि
- 7. एमएसबिल्ड -
- 8. एमएसबिल्ड
- 9. एमएसबिल्ड: VS2010
- 10. एमएसबिल्ड इनलाइन टास्क - संदर्भ गैर-मानक माइक्रोसॉफ्ट असेंबली
- 11. एमएसबिल्ड
- 12. वेब का उपयोग कर उन्नत कार्य। कॉनफिग रूपांतरण
- 13. विजुअल स्टूडियो 2010 - प्रति डेवलपर/मशीन/पर्यावरण वेब। कॉनफिग सेटिंग्स
- 14. एएसपी.NET 4.0 वेब को कॉन्फ़िगर कैसे करें। कॉनफिग?
- 15. ऐप। कॉनफिग बनाम AppName.exe.Config
- 16. पावरशेल ऐप। कॉनफिग
- 17. ऐप। कॉनफिग या एक्सएएमएल
- 18. एकाधिक ऐप। कॉनफिग फ़ाइलें
- 19. एमएसबिल्ड
- 20. एमएसबिल्ड
- 21. एमएसबिल्ड
- 22. एमएसबिल्ड
- 23. वेब-आईएनएफ/टैग के बाहर जेएसपी टैग
- 24. मोनो के खिलाफ तर्क क्या हैं? क्या माइक्रोसॉफ्ट कम्युनिटी वादा कुछ भी बदलता है?
- 25. माइक्रोसॉफ्ट वेब पर NullReferenceException https.Web.Administration https बाध्यकारी
- 26. एमएसबिल्ड: प्रोजेक्ट
- 27. माइक्रोसॉफ्ट रिपोर्ट व्यूअर वेब कंट्रोल स्क्रिप्ट मैनेजर की आवश्यकता है
- 28. एमएसबिल्ड: वेब परिनियोजन परियोजनाओं (वीएस -2010) के लिए वेब परिनियोजन पैकेज कैसे बनाया जाए?
- 29. विजुअल स्टूडियो/एमएसबिल्ड
- 30. जावास्क्रिप्ट फ़ंक्शन में सरणी बदलना फ़ंक्शन के बाहर सरणी बदलता है?
बढ़िया, मुझे एक सी # संस्करण –
लिखने की ज़रूरत है, मेरे पास एक स्वयं-बूटस्ट्रैपिंग पावरहेल स्क्रिप्ट है जिसका आप https://gist.github.com/sayedihashimi/f1fdc4bfba74d398ec5b –
पर बहुत अच्छा उपयोग कर सकते हैं! मुझे $ xml और $ xdt पर Resolve-path को कॉल करना पड़ा, लेकिन इसके अलावा, यह बहुत उपयोगी है !, thx – PierrOz