के बिना .csproj फ़ाइल में एक नई फ़ाइल कैसे जोड़ सकता हूं मैं कमांड प्रॉम्प्ट से .csproj
पर एक नई फ़ाइल कैसे जोड़ सकता हूं?मैं दृश्य स्टूडियो
उत्तर
समाधान एक्सप्लोरर में राइट क्लिक करके प्रोजेक्ट को अनलोड करें। राइट क्लिक करके प्रोजेक्ट को संपादित करें। f.ex जोड़ें:
<Compile Include="Properties\AssemblyInfo.cs" />
.csproj फ़ाइलों MSBuild कमांड लाइन उपकरण में इनपुट के रूप में इस्तेमाल किया जा सकता।
और उदाहरण के लिए, इस सवाल:
MSBuild संदर्भ देखें।
MSBuild — Use the .csproj file or roll your own?
आप बस एक पाठ संपादक का उपयोग उन्हें संपादित करें और कुछ भी MSBuild की अनुमति देता है क्या करने के लिए कर सकते हैं। यदि आप कस्टम बिल्ड क्रियाएं डालते हैं तो विजुअल स्टूडियो एक डेवलपर को चेतावनी दे सकता है जब प्रोजेक्ट लोड हो जाता है जिसमें आपके द्वारा किए गए कार्यों के आधार पर कस्टम क्रियाएं होती हैं।
मुझे नहीं लगता कि ऐसा कोई उपकरण है जो ऐसा करने के लिए कमांड लाइन पर "ऐड-प्रोजेक्ट" कमांड का जवाब देगा, लेकिन मुझे लगता है कि आप एक्सएमएल सामग्री में हेरफेर करने के लिए प्रोग्राम/स्क्रिप्ट बनाने में भाग्य प्राप्त कर सकते हैं सीधे csproj फ़ाइलें।
एक csproj फ़ाइल की संरचना इस तरह दिखता है:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="...">
<PropertyGroup>
<!-- Properties which affect the build process -->
</PropertyGroup>
<ItemGroup>
<!-- Groups of items to process -->
</ItemGroup>
</Project>
एक परियोजना के लिए एक सी # कोड फ़ाइल जोड़ने के लिए, तो आप सिर्फ एक ItemGroup
तत्व करने के लिए एक Compile
तत्व जोड़ने की जरूरत:
<Compile Include="{relative path to file}" />
यदि आप किसी मौजूदा प्रोजेक्ट फ़ाइल को टेम्पलेट के रूप में उपयोग करते हैं, तो यह बहुत ही सरल XSLT के साथ संभव होना चाहिए।
Linq2Xml का उपयोग करके आप इसे एक आसान तरीका यहां कर सकते हैं। मैंने एक एकल और एक सूची आधारित विधि शामिल की है। ओह, और कैस्पर की तरह कहा: आपके प्रोग्राम को संपादित करने से पहले आपको वीएस से प्रोजेक्ट को अनलोड करना होगा। फिर पूरा होने पर बस इसे पुनः लोड करें।
private static void AddFilesToUnitTestProject(FileInfo[] files, string measureBaseDirPath, string measureDataDirSuffix)
{
var unitTestProjectPath = measureBaseDirPath + _unitTestProjectFile;
var unitTestProjectFile = XDocument.Load(unitTestProjectPath);
var itemGroup = unitTestProjectFile.Nodes()
.OfType<XElement>()
.DescendantNodes()
.OfType<XElement>().First(xy => xy.Name.LocalName == "ItemGroup");
foreach (var fileInfo in files)
{
var xelem = AddProjectContent(measureDataDirSuffix + fileInfo.Name, unitTestProjectFile);
itemGroup.Add(xelem);
}
unitTestProjectFile.Save(unitTestProjectPath);
}
private static void AddFileToUnitTestProject(string pathToAdd, string measureBaseDirPath, string measureDataDir)
{
var unitTestProjectPath = measureBaseDirPath + _unitTestProjectFile;
var unitTestProjectFile = XDocument.Load(unitTestProjectPath);
var itemGroup =
unitTestProjectFile.Nodes()
.OfType<XElement>()
.DescendantNodes()
.OfType<XElement>().First(xy => xy.Name.LocalName == "ItemGroup");
var xelem = AddProjectContent(pathToAdd, unitTestProjectFile);
itemGroup.Add(xelem);
unitTestProjectFile.Save(unitTestProjectPath);
}
private static XElement AddProjectContent(string pathToAdd, XDocument doc)
{
XNamespace rootNamespace = doc.Root.Name.NamespaceName;
var xelem = new XElement(rootNamespace + "Content");
xelem.Add(new XAttribute("Include", pathToAdd));
xelem.Add(new XElement(rootNamespace + "CopyToOutputDirectory", "Always"));
return xelem;
}
- AddProjectContent विधि
क्या आप कृपया AddProjectContent के लिए कोड प्रदान कर सकते हैं क्योंकि आपके उत्तर को मेरी समस्या ठीक करनी चाहिए .. –
कोई समस्या नहीं है। यहां जाएं: निजी स्थैतिक XElement AddProjectContent (स्ट्रिंग पथ टूएड, एक्स डॉक्यूमेंट दस्तावेज़) { XNamespace rootNamespace = doc.Root.Name।NamespaceName; var xelem = new XElement (rootNamespace + "content"); xelem.Add (नया XAttribute ("शामिल करें", pathToAdd)); xelem.Add (नया XElement (rootNamespace + "CopyToOutputDirectory", "हमेशा"); वापसी xelem; } –
के साथ अपडेट किया आप किसी पाठ संपादक .csproj संपादित कर सकते हैं। –
और आप ऐसा क्यों करना चाहते हैं? लक्ष्य क्या है? –
यह एक वास्तविक सवाल है, मैं इस बात से सहमत नहीं हूं कि इसे बंद कर दिया जाना चाहिए था। –