使用Prism Modularity并包含Unity的Unity容器错误

时间:2011-08-04 17:29:04

标签: c# wpf unity-container prism

我在尝试使用由源引用的Unity的Prism4 Bootstrapper时遇到错误(将现有项目包含在解决方案中)。我从源代码构建Unity然后包含输出文件也会出错。

以下是详细信息:

我有一个使用Prism4的项目。 Prism的Bootstrapper组件依赖于Unity 2.0。对我来说更精确,他们依赖于版本2.0.414.0的统一。

如果我尝试将当前或更新版本的Prism包含在我的项目中作为prism 4,那么VS会给我一条消息,生成一些强制加载最新程序集的app.config代码。

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
            <bindingRedirect oldVersion="0.0.0.0-2.1.505.0" newVersion="2.1.505.0"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>

<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31BF3856AD364E35" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-2.1.505.0" newVersion="2.1.505.0"/> </dependentAssembly> </assemblyBinding> </runtime>

使用Unity 2.0和Unity 2.1的预构建的dll文件时,这没有问题......

但是,如果我尝试从源代码构建这些并使用新的DLL,或者将项目直接包含到我的项目中,我总会收到错误:

The type 'Microsoft.Practices.Unity.IUnityContainer' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.Practices.Unity, Version=2.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.

请注意Unity 2.0 [b] IS [/ b]版本2.0.414.0。所以我的第一次尝试是使用unity 2.0源代码库。我还使用此版本进行了许多后续尝试,包括从一个新项目开始。我已经尝试通过预先构建的bin文件,源代码和自定义构建的dll来包含Prism,结果相同。我也尝试过使用Unity 2.1的所有相同的东西,希望它可以工作。

我的环境是MSVC#2010 win7 x64。我在x86和任何CPU配置下构建,以及调试和发布。唯一的依赖是Prism和Unity。

1 个答案:

答案 0 :(得分:0)

找到了解决方法。

我打开了Prism源的解决方案并删除了对unity的任何引用。然后我将Unity项目作为现有项目添加到棱镜解决方案中。最后,我将团结作为所有相关棱镜项目的项目。因此,我将用于我的项目的统一dll正由prism unityextensions输出。

稍后会对某些批处理文件进行更新,这是一种解决方法。

不是最好的解决方案,但我已准备好继续前进。

P.S。主题行不正确。 UnityExtensions在棱镜中是一个问题,而不是模块化问题。当我把它称为“

时,我还不清楚UnityBootstrapper