两个问题:
1)基本.NET程序集未包含在ILMerged程序集中
在从.NET 3.5/Visual Studio2008升级到.NET 4/Visual Studio2010之后,我在后期构建中使用ILMerge时遇到了问题。我有一个包含多个项目的解决方案,这些项目的目标框架设置为".NET Framework4“。我使用以下ILMerge命令将单个项目DLL合并到单个DLL中:
if not $(ConfigurationName) == Debug
if exist "C:\Program Files (x86)\Microsoft\ILMerge\ILMerge.exe"
"C:\Program Files (x86)\Microsoft\ILMerge\ILMerge.exe"
/lib:"C:\Windows\Microsoft.NET\Framework64\v4.0.30319"
/lib:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies"
/keyfile:"$(SolutionDir)$(SolutionName).snk"
/targetplatform:v4
/out:"$(SolutionDir)bin\development\$(SolutionName).dll"
"$(SolutionDir)Connection\$(OutDir)Connection.dll"
...other project DLLs...
/xmldocs
如果我不指定.NET 4框架目录的位置,就会收到来自ILMerge的“不允许未解析的程序集引用:系统”错误。如果不指定程序集目录的位置,则会出现“不允许未解析的程序集引用: Microsoft.VisualStudio.QualityTools.UnitTestFramework”MSTest“错误。
上面的ILMerge命令运行并生成一个动态链接库。但是,当我在另一个.NET 4 C#项目中引用该DLL并尝试在其中使用代码时,我收到以下警告:
无法解析主引用"MyILMergedDLL“,因为它间接依赖于.NET框架程序集"mscorlib,Version=4.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”,该程序集的版本"4.0.65535.65535“高于当前目标框架中的版本"4.0.0.0”。
如果我随后删除/targetplatform:v4
标志并尝试使用MyILMergedDLL.dll,则会得到以下错误:
类型“System.Xml.Serialization.IXmlSerializable”是在未被引用的程序集中定义的。必须添加对程序集'System.Xml,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089‘的引用。
看起来我不应该这么做。无论谁使用我的MyILMergedDLL.dll应用程序接口,都不必添加对它所引用的任何库的引用。我怎么才能避免这个问题呢?
2)仅在使用合并的程序集时使用TypeLoadException
编辑:除此之外,即使我在使用MyILMergedDLL.dll的消费者项目中添加了对System.Xml
的引用,使用MyILMergedDLL.dll中的一些代码也会产生此异常:
System.TypeLoadException:未能从程序集“System.Func`2,MyILMergedDLL,Version=1.0.1.1,Culture=neutral,PublicKeyToken=...”加载类型“”。“”
这是我的消费者项目中的代码;导致TypeLoadException
的代码行是第二行:
var keys = new[] {"a", "b", "c"};
var row = new Row(keys);
抛出TypeLoadException
的特定Row
构造函数是在MyILMergedDLL
的公共类中定义的,当我在引用各个项目DLL时使用此构造函数时,它工作得很好。只有当我在引用IL合并的DLL时使用此构造函数时,我才会得到异常。我不知道怎么回事。
下面是构造函数:
public Row(IEnumerable<string> keys) : base(keys) { }
它所引用的base
具有以下代码:
foreach (string key in keys.Where(
key => !string.IsNullOrEmpty(key)
))
{
_dic.Add(key, string.Empty);
}
https://stackoverflow.com/questions/2961357
复制相似问题