5

WF 4 を使用して再ホストされたワークフロー デザイナーに取り組んでいます。このデザイナー コントロールを使用するアプリケーションは、2 つ以上の言語固有のリソース dll をロードする多言語アプリケーションです。"en" と "en-US" などの 1 つの言語に対して 2 つのサテライト アセンブリがある場合、デザイナーは次のような例外をスローします。

Compiler error(s) encountered processing expression "testExpression". The project already has a reference to assembly MyProject.resources. A second reference to 'C:\Dlls\en-US\MyProject.resources.dll' cannot be added.

スタックトレースは次のとおりです。

   at Microsoft.VisualBasic.Activities.VisualBasicHelper.Compile[T](LocationReferenceEnvironment environment, Boolean isLocationReference)
   at Microsoft.VisualBasic.Activities.VisualBasicHelper.Compile[T](LocationReferenceEnvironment environment)

サテライト アセンブリのプロパティの [詳細] タブを確認したところ、それらがすべてニュートラル言語であることがわかりました。アプリケーションがこれらのdllが同じではないことを認識できるように、それらは特定の言語でなければならないと思います。

この問題を解決するにはどうすればよいですか? dll ファイルの言語プロパティを言語固有に変更できますか? これは役に立ちますか?

4

1 に答える 1

3

私はこれと同じ問題を抱えていましたが、AssemblyContextControlItem を介してデザイナーが「見る」ことができる dll を定義し、サテライト アセンブリを除外することで修正できました (これはとにかく必要ありませんでした)。

var acci = this.Designer.Context.Items.GetValue<AssemblyContextControlItem>() ?? new AssemblyContextControlItem();
acci.ReferencedAssemblyNames = acci.AllAssemblyNamesInContext
                                   .Select(an => new System.Reflection.AssemblyName(an))
                                   .Where(an => !an.Name.Contains(".resources"))
                                   .ToList();
this.Designer.Context.Items.SetValue(acci);
于 2013-09-17T13:11:57.713 に答える