2013-01-17 10 views

risposta

0

Scaricare il progetto facendo clic con il pulsante destro del mouse in Solution Explorer. Modifica il progetto facendo clic con il pulsante destro del mouse. Aggiungere f.ex:

<Compile Include="Properties\AssemblyInfo.cs" /> 
0

file Csproj possono essere utilizzati come input nello strumento da riga di comando MSBuild.

vedere il riferimento MSBuild:

MS Build Reference

e, per esempio, questa domanda.

MSBuild — Use the .csproj file or roll your own?

si può semplicemente utilizzare un editor di testo per modificarli e fare qualsiasi cosa MSBuild permette. Se si inseriscono azioni di compilazione personalizzate, Visual Studio potrebbe avvisare uno sviluppatore quando viene caricato il progetto che contiene azioni personalizzate, a seconda di ciò che si esegue.

4

Non penso che ci sia uno strumento che risponderà a un comando "aggiungi-progetto" sulla riga di comando per farlo, ma penso che potresti avere la fortuna di creare un programma/script per manipolare il contenuto XML di file csproj direttamente.

La struttura di un file csproj assomiglia a questo:

<?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> 

Per aggiungere un file di codice C# per un progetto, è solo bisogno di aggiungere un elemento Compile ad un elemento ItemGroup:

<Compile Include="{relative path to file}" /> 

Se si utilizza un file di progetto esistente come modello, questo dovrebbe essere possibile con un XSLT molto semplice.

1

Ecco un modo semplice per farlo utilizzando Linq2Xml. Ho incluso un metodo basato su un singolo e un elenco. Oh, e come ha detto Casper: dovrai scaricare il progetto da VS prima che il tuo programma possa modificarlo. Quindi ricaricalo appena finito.

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; 
} 
  • aggiornato con metodo AddProjectContent
+0

Si prega di fornire il codice per AddProjectContent perché la risposta dovrebbe risolvere il mio problema .. –

+1

Sicuramente nessun problema. Ecco qui: statico privato XElement AddProjectContent (string pathToAdd, XDocument doc) { XNamespace rootNamespace = doc.Root.Name.NameSpaceName; var xelem = new XElement (rootNamespace + "Content"); xelem.Add (nuovo XAttribute ("Include", pathToAdd)); xelem.Add (nuovo XElement (rootNamespace + "CopyToOutputDirectory", "Always")); return xelem; } –

Problemi correlati