0

オブジェクトのコレクション (DataProviders) を持つコンポーネントがあります。各 DataProvider には、設計時にユーザーが設定した一意の名前があります。デザイナに、DataProvider の名前を含む追加ファイルにクラスを生成させるにはどうすればよいですか?

namespace MyNamespace
{
public class DpContainer : Component
{
public DataProviderCollection collection = new DataProviderCollection();

  private void InitializeComponent()
  {
      DataProvider dataprovider1 = new DataProvider();
      dataprovider1.Name = "Provider 1";

      DataProvider dataprovider2 = new DataProvider();
      dataprovider2.Name = "Provider 2";

      collection.add(dataProvider1);
      collection.add(dataProvider2);
    }
  }
}

生成されたクラスは次のようになります。

namespace DataProviderNamespace
{
  public class DataProviderNames
  {
    public const string Provider1 = "Provider 1";
    public const string Provider2 = "Provider 2";
  }
}

このクラスを designer.cs ファイルとして追加したいと思います。CodeDom を使用してこのクラスを作成できますが、残念ながらファイルのフル パスを指定する必要があります。さらに、クラスを部分的にしたいと思います。これどうやってするの?

4

2 に答える 2

1

必要な機能を備えているかどうかはわかりませんが、Text Template Transformation Toolkit( T4 ) はご覧になりましたか? これを使用して、データ アクセス コンポーネントのコードを生成しました。VSが付属しているため、追加で購入する必要はありません。

于 2010-01-29T15:49:38.610 に答える
0

Ok。私は解決策を見つけました(DTEを使用):カスタムCodeDomSetializerのSerializeメソッドで:

IDesignerSerializationManager manager;
EnvDTE._DTE dte = (DTE) manager.GetService(typeof(DTE));

dteから実際のドキュメントのファイル名を取得します。

dte.ActiveDocument.FullName

今、私は現在のプロジェクトを取得します:

ProjectItem proj = (ProjectItem)manager.GetService(typeof(ProjectItem));

プロジェクトに新しいファイルを追加します。

proj.ProjectItems.AddFromFile(NewFile);
于 2010-02-01T11:23:46.753 に答える