0

プロジェクトにICSharpCode.SharpDevelopライブラリを使用しています。DefaultProjectのインスタンスを作成して、必要なすべての参照を取得する方法を理解しようとしています。だから、私はのようなものが必要です

 projectContent.AddReferencedContent(_projectContentRegistry.GetProjectContentForReference("System.Core", "System.Core"));

それが機能しないことを除いて-GetProjectContentForReference(..)は、引数に提供しようとしているものが何であれ、常にnullを返します。

4

1 に答える 1

1

SharpDevelop4.xのProjectContentRegistryクラスのバグのようです。GetProjectContentForReference()メソッドをデバッグすると、間違ったGACフォルダーを検索していることがわかります。フォルダを探しています

System.Core\4.0.0.0__b77a5c561934e089\System.Core.dll

フォルダを検索する必要がある場合

System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll

SharpDevelopは現在MSBuildを使用してアセンブリ参照の場所を特定しているため、このバグは認識されていないと思います。たとえば、System.Coreの場合、プロジェクトのターゲットフレームワークに基づいて、参照アセンブリフォルダーでアセンブリが検索されます。

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Core.dll

代わりにできることは、ICSharpCode.SharpDevelop.Domアセンブリの一部であるGacInteropクラスを使用してファイル名を見つけることです。以下のコードは、null以外のプロジェクトコンテンツオブジェクトを返す必要があります。

var reference = new DomAssemblyName("System.Core");
reference = GacInterop.FindBestMatchingAssemblyName(reference);
string fileName = GacInterop.FindAssemblyInNetGac(reference);
var registry = new ProjectContentRegistry();
IProjectContent pc = registry.GetProjectContentForReference("System.Core", fileName);
于 2013-03-24T10:47:58.783 に答える