我希望工作一两个小时的工作现在已经变成了一场彻头彻尾的崩溃.
问题:我正在尝试序列化我的NHibernate配置的副本并将其存储在...用于生成它的项目中!
当前的手动解决方案:我有一个项目Foo
要生成它,我:
我正在尝试自动执行此操作,并认为这将是一件简单的事情:
不幸的是,我现在收到2个错误.
首先,有点奇怪的例外:
FluentNHibernate.Cfg.FluentConfigurationException: An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.
---> System.Runtime.Serialization.SerializationException: Unable to find assembly 'FluentNHibernate, Version=1.1.0.685, Culture=neutral, PublicKeyToken=8aa435e3cb308880'.
Run Code Online (Sandbox Code Playgroud)
我认为FluentNHibernate抱怨它无法找到FluentNHibernate程序集?
一旦我第一次从visual studio运行Task,visual studio(devenv.exe)会锁定我的Foo.BuildSupport.dll和我的Foo.exe(可能是因为它只是将它们视为支持库而不是实际的构建库),所以我无法重建它们.通常,这是因为vs假定(并且可能是正确的)BuildSupport库是相当静态的并且不依赖
什么是自动化这样的流程的好方法?我现在只有一些初步的想法,但我能想到的唯一一件事就是构建一个完全独立的可执行文件,由msbuild运行(看到一个相当于这个的任务,现在找不到它),或者其他相关的东西涉及单独的appdomain并通过反射手动调用该函数.但在我走上这条道路之前,我错过了一些更容易,更明显的东西吗?
我遇到了一个与此非常相似的问题。我的问题与 MSBuild 将 Xml 反序列化为第三方程序集中包含的类有关。它无法解析序列化工作所需的程序集,即使程序集是项目的一部分,并且在序列化之外解析它们也没有问题。无法给出比这更技术性的问题描述,但我发现这段代码为我解决了这个问题,
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
Assembly ayResult = null;
string sShortAssemblyName = args.Name.Split(',')[0];
Assembly[] ayAssemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly ayAssembly in ayAssemblies)
{
if (sShortAssemblyName == ayAssembly.FullName.Split(',')[0])
{
ayResult = ayAssembly;
break;
}
}
return ayResult;
}
public Constructor()
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}
Run Code Online (Sandbox Code Playgroud)
我认为这对我有用的原因是因为我的应用程序解析了序列化之外的程序集,因此我重写了 AssemblyResolution 标注以将其指向由于某种原因而不会单独使用的良好程序集。
希望这有用!