5

我正在使用 WF 4 开发一个重新托管的工作流设计器,我使用这个设计器控件的应用程序是一个多语言应用程序,它加载 2 个或更多语言特定的资源 dll。如果我有两个用于一种语言(例如“en”和“en-US”)的附属程序集,则设计器会抛出如下异常:

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 文件的 Language 属性更改为 Language Specific 吗?这有帮助吗?

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 回答