我构建了一个简单的NHibernate Application,但我想使用Mapping Attributes而不是Mapping XML。
现在我遇到了问题,当我创建一个单元测试项目并希望加载映射属性时,我的域对象在另一个项目中!
这是我的单元测试:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
namespace Tests
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
Configuration cfg = new Configuration();
cfg.Configure();
cfg.AddInputStream(NHibernate.Mapping.Attributes.HbmSerializer.Default.Serialize(
System.Reflection.Assembly.GetExecutingAssembly()));
new SchemaExport(cfg).Execute(false, true, false);
}
}
在这一行
cfg.AddInputStream(NHibernate.Mapping.Attributes.HbmSerializer.Default.Serialize(
System.Reflection.Assembly.GetExecutingAssembly()));
我得到了这个例外:
Result Message:
Test method Tests.UnitTest1.TestMethod1 threw exception:
NHibernate.Mapping.Attributes.MappingException: The following assembly contains
no mapped classes: Tests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Result StackTrace:
at NHibernate.Mapping.Attributes.HbmSerializer.Serialize(Stream stream, Assembly assembly)
at NHibernate.Mapping.Attributes.HbmSerializer.Serialize(Assembly assembly)
at Tests.UnitTest1.TestMethod1() in ...Tests\UnitTest1.cs:Line 17.
我想而不是
System.Reflection.Assembly.GetExecutingAssembly()
我必须以某种方式得到我的主要项目的组装。
答案 0 :(得分:2)
我发现最简单的方法是:
Assembly.Load("Project Name of Desired Assembly")
我在线阅读了很多内容,包括这篇文章,没有什么比使用这种方法更简单了。此外,JoelC提到的方法可能有用,但我不能让它为我工作,这没有任何问题。
答案 1 :(得分:1)
是的,从单元测试中调用System.Reflection.Assembly.GetExecutingAssembly()
通常会将单元测试运行器作为执行程序集。
您应该可以致电typeof([TargetAssemblyClass]).Assembly
查找主项目组合。当然,这需要参考我希望你已经拥有的主要项目。
编辑:
调用System.Reflection.Assembly.GetAssembly(typeof([TargetAssemblyClass]))
是实现同样目标的另一种方式。