3

プロジェクト、ソリューションフォルダ、リソースファイルなどのその他のアイテムをプログラムに追加してソリューションに追加したいと思っていましたが、そのための最善の方法は何かを正確には分かりません。Visual Studioソリューションファイルをシリアル化および逆シリアル化するか、プログラムで編集しますか?

知られていない人にとっては、非常に単純化されています。これはsulutionファイル(の.sln)は、通常、どのように見えるかです:

Microsoft Visual Studio Solution File, Format Version 11.00 
# Visual Studio 2010 
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "project name", "projectpath\name.csproj", "{785ECC80-AF1B-4FBC-B97B-2EC43B7E81E8}" 
EndProject 
Global 
    GlobalSection(ProjectConfigurationPlatforms) = postSolution 
     {785ECC80-AF1B-4FBC-B97B-2EC43B7E81E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 
    EndGlobalSection 
EndGlobal 

私は、これは、このようなXML(?それはある)のように、実際のオープンな標準であるかどうかわからないんだけど、それは一種の視覚的なように思えます基本チームはxmlの独自のバージョンを作った。 (賛辞ではない)

とにかく、これをオブジェクトとの間でシリアル化およびデシリアライズするにはどうすればよいでしょうか?私は自分のIFormatterを作ることを考えていましたが、それはやや複雑なようです。 EnvDTEライブラリを使用して

+0

Visual Studioマクロを使用するとどうなりますか? マクロを使用すると、VS IDEでほぼすべてのコマンドを自動化できます。 VSバージョンごとにフォーマットが少し変わるので、私はsln/prjファイルを編集しません。 – SvenG

+0

今のところ、vs2010のソリューションファイルを編集するだけで済みます。そして私はVisual Studioマクロがそうするとは思わない、私は実際のクラスライブラリのために必要とするつもりです。 –

+0

実行中のマシンでVS IDEが利用可能であることが確かであれば、バックグラウンドでVS IDEを開き、DTEインターフェイス経由でタスクを自動化することができます。 http://www.mztools.com/articles/2005/mz2005005.aspx – SvenG

答えて

4

MSDNEnvDTE is an assembly-wrapped COM library containing the objects and members for Visual Studio core automation.によると、あなたはまた、そこに非常に有用であるべき例を使用してとSolutionProjectインタフェースのドキュメントを見つけることができます。 EnvDTEライブラリなし

ソリューションファイルには、: - プロジェクトを追加した構成を構築設定

ここでやるべきことがたくさんがないようです。私の意見では、最善のアプローチは単純なTextReaderを使って解析し、いくつかのデータを追加した後に書き直すことです。これがテンプレートです。

Project("{solution guid}") = "project name", "projectpath\name.csproj", "{project guid}"

すべてのプロジェクトのGUID同じソリューションを使用することを忘れないでください。

プロジェクトファイル:ここ

ない驚きは、それはあなたが作成/ XMLにLINQを使用して変更することができ、標準のXMLファイルです。さまざまな例がここにあります:http://msdn.microsoft.com/en-us/library/dd393574.aspx。もちろん ソリューションファイルのような同じプロジェクトGUIDを使用することを忘れないでください。

私はそれが役に立ちそうです。ここで

3

はいくつかのコードです:

 using EnvDTE; 
     ..... 

     Solution s = new SolutionClass(); 
     s.Open(solutionFilePath); 
     s.AddFromFile(projectFilePath); 
     s.Remove(s.Projects[6]); 

あなたはforeach(var project in s.Projects)のようにプロジェクトをナビゲートして、必要なものを見つけるために彼らのproject.Nameプロパティを確認することができます。

は、DLL(AddReference-> [参照]タブ)以下の参考文献に入れる:

C:\プログラムファイル(x86の)\のMicrosoft Visual Studioの10.0 \ Common7 \ IDE \ PublicAssemblies \ EnvDTE.dll。

すべてのクラスは、MSDNで詳しく説明されています。 EnvDTEはVSオートメーションのための非常に強力なライブラリです。私はslnファイルを自分でシリアル化しても構わないと思うが、自分の書式を発明するのは悪いことに同意する。

+1

書いてしまいました。 –

+0

私はそれがvar s = EnvDte.Dte.Solutionであるべきだと信じています。 – wchoward

関連する問題