10

vs2012 のコマンドラインからプロジェクトにファイルを含める方法はありますか?

私が尋ねている理由は、他の IDE ( ST3 など) を使用したり、Photoshop などからファイルを保存したりするときに、プロジェクト フォルダーに追加する新しいファイルを含めるのが非常にイライラするためです。

私は Grunt を使用して、多くの縮小、連結、Angular スクリプトでの ngmin の実行などを行っています。grunt タスクがシェル コマンドを実行できるようにする grunt-shell プラグインがあります (TFS によってロックされたファイルのロックを解除するために既に使用しています)。 )。そのため、追加した新しいファイルに対してプロジェクトにインクルードするタスクを作成できると考えていました( grunt-watch で特定のフォルダーを監視することにより)。

4

5 に答える 5

5

これを処理するための小さなexeを作成するだけです:

using System.IO;
using Microsoft.Build.Evaluation;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;

namespace AddTfsItem
{
  class Program
  {
    static void Main(string[] args)
    {
      var projectFile = args[0];
      var projectDirectory = Path.GetDirectoryName(projectFile);
      var sourceFile = args[1];
      var itemType = args.Length > 2 ? args[2] : "Compile";

      var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(projectFile);
      using (var server = new TfsTeamProjectCollection(workspaceInfo.ServerUri))
      {
        var workspace = workspaceInfo.GetWorkspace(server);

        workspace.PendEdit(projectFile);

        using (var projectCollection = new ProjectCollection())
        {
            var project = new Project(projectFile, null, null, projectCollection);
            project.AddItem(itemType, sourceFile);
            project.Save();
        }

        workspace.PendAdd(Path.Combine(projectDirectory, sourceFile));
      }
    }
  }
}

C:\Projects\Test の構造:

  • Test.csproj
  • あるフォルダ
    • Tester.cs

使用法:AddTfsItem.exe C:\Projects\Test\Test.csproj SomeFolder\Tester.cs

ファイルは .csproj ファイルに対して相対的でなければならないことに注意してください。

于 2013-07-29T09:07:48.850 に答える
3

プロジェクトファイルを手動で編集してファイルを追加できます。

プロジェクト ファイルは、簡単に編集できる xml ベースの形式です。編集には grunt-text-replace を使用してみてください。

交換できます

</Project>

  <ItemGroup>
     <Compile Include="PythonProjectFactory.cs" />
  </ItemGroup>
</Project>
于 2013-07-26T08:19:15.977 に答える
1

プロジェクト ファイルに対して powershell スクリプトを実行することもできます。私たちはこれを長い間使用しています。

AddContentToProject.ps1

    # Calling convension:
    #   AddContentToProject.PS1 "Mycsproj.csproj", "MyFolder/MyFile.txt"
    param([String]$path, [String]$include)

    $proj = [xml](Get-Content $path)
    [System.Console]::WriteLine("")
    [System.Console]::WriteLine("AddItemToProject {0} on {1}", $include, $path)

    # Create the following hierarchy
    #  <Content Include='{0}'>
    #  </Content>

    $xmlns = "http://schemas.microsoft.com/developer/msbuild/2003"
    $itemGroup = $proj.CreateElement("ItemGroup", $xmlns);
    $proj.Project.AppendChild($itemGroup);

    $contentNode = $proj.CreateElement("Content", $xmlns);
    $contentNode.SetAttribute("Include", $include);
    $itemGroup.AppendChild($contentNode)

    $proj.Save($path)

次に、これをpowershellで実行します

.\AddContentToProject.ps1 "Mycsproj.csproj" "MyFolder/MyFile.txt"

またはこれをコマンドプロンプトから

powershell -noexit "& ""C:\my_path\AddContentToProject.ps1"""
于 2016-11-21T19:29:14.310 に答える