为什么要加载此 DLL DevExpress.ExpressApp?
Why is this DLL DevExpress.ExpressApp loading?
我正在尝试为客户部署插件。
我们使用 MEF,导入,导出属性。我使用导出,客户导入它
我的应用程序使用 DevExpress XtraGrid、XtraEditors 和许多其他 DevExpress DLL(见屏幕截图),System.Data.Services。
尽管提供了所有这些必需的 DLL 及其许多依赖项,该插件似乎仍然需要 DevExpress.ExpressApp。 DevExpress.ExpressApp 及其所有其他依赖项绝对不需要。
由于客户一直抱怨他们有一个FileNotFound异常,我决定做一个测试项目来导入我自己的插件。这是我的测试代码,用于测试他得到的客户理论如下。
System.IO.FileNotFoundException: Could not load file or assembly 'DevExpress.ExpressApp.v14.2, Version=14.2.7.0,
Our Plugin
[Export(typeof (ISomething))]
public class MyClass : ISomething
{
}
TESTER
class Program
{
[ImportMany]
public IEnumerable<ISomething> Somethings { get; set; }
static void Main(string[] args)
{
var rp = new Program();
rp.Run();
}
public void Run()
{
Compose();
}
public void Compose()
{
try
{
AppDomain.CurrentDomain.FirstChanceException += FirstChanceHandler;
AggregateCatalog aggregatecatalogue = new AggregateCatalog();
aggregatecatalogue.Catalogs.Add(new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
CompositionContainer container = new CompositionContainer(aggregatecatalogue);
CompositionBatch batch = new CompositionBatch();
batch.AddPart(this);
container.Compose(batch);
}
catch (Exception ex)
{
throw ex;
}
}
static void FirstChanceHandler(object source, FirstChanceExceptionEventArgs e)
{
System.Text.StringBuilder msg = new System.Text.StringBuilder();
msg.AppendLine(e.Exception.GetType().FullName);
msg.AppendLine(e.Exception.Message);
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
msg.AppendLine(st.ToString());
msg.AppendLine();
String desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string logFilePath = String.Format("{0}\{1}", desktopPath, "logfile.txt");
System.IO.File.AppendAllText(logFilePath, msg.ToString());
}
果然,我在输出中看到了window,发现确实是从GAC加载了这个DLL和ExpressApp相关的一些依赖。
问题:我如何确定在哪里以及为什么需要 ExpressApp?
我可以简单地只提供 DLL,但它会继续存在大量的依赖项,我知道为什么需要它们。
有用于检查托管程序集依赖项的工具。 MS Windows SDK 包含 ildasm.exe 实用程序。您可能已将其安装在:
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\ildasm.exe
当我遇到类似的问题(dll 版本不匹配)时,我还使用命令行中的 cygwin 'grep' 在所有 DX 和我们的自定义程序集中搜索缺少的依赖字符串以找到实际的 . dll 文件引用缺少的依赖 dll 版本。然后在ildasm.exe中打开,双击MANIFEST树节点。在那里我看到了对我没有的 .dll 版本的引用。
您可以按照相同的步骤尝试跟踪丢失的依赖项。 运行 "DevExpress.ExpressApp" 字符串搜索项目 bin 目录中的所有 DX dll 然后如果找到结果,使用 ildasm.exe
打开报告的文件
请注意,很可能您没有安装 https://www.cygwin.com/ 软件包中的 'grep',因此请使用您可用的字符串搜索实用程序。
还有其他 3rd 方工具用于检查 dll 依赖性,但必须单独安装,而 ildasm.exe 是 Windows SDK 的一部分。请参阅此问题的其他工具参考答案:
How do I determine the dependencies of a .NET application?
更新:
如果您的 bin 文件夹中没有所有 DX 库,因为您的应用程序是一个插件并直接从 GAC 使用 DX 库,那么您可以直接在 DX 安装文件夹中搜索 DevExpress.ExpressApp 引用,就我而言:
C:\Program Files (x86)\DevExpress 15.2\Components\Bin\Framework
我已将上述文件夹内容复制到临时文件夹,删除了所有区域设置子文件夹以及所有 DevExpress.ExpressApp.* dll,然后 运行 命令:
grep -nr "DevExpress.ExpressApp"
产生了以下结果:
Binary file DevExpress.EasyTest.v15.2.dll matches
Binary file DevExpress.Persistent.Base.v15.2.dll matches
Binary file DevExpress.Persistent.BaseImpl.EF.v15.2.dll matches
Binary file DevExpress.Persistent.BaseImpl.v15.2.dll matches
Binary file DevExpress.Workflow.Activities.v15.2.Design.dll matches
Binary file DevExpress.Workflow.Activities.v15.2.dll matches
查看以上任何 dll 是否被您的插件或要部署插件的主机应用程序使用。
HTH
我正在尝试为客户部署插件。 我们使用 MEF,导入,导出属性。我使用导出,客户导入它 我的应用程序使用 DevExpress XtraGrid、XtraEditors 和许多其他 DevExpress DLL(见屏幕截图),System.Data.Services。 尽管提供了所有这些必需的 DLL 及其许多依赖项,该插件似乎仍然需要 DevExpress.ExpressApp。 DevExpress.ExpressApp 及其所有其他依赖项绝对不需要。
由于客户一直抱怨他们有一个FileNotFound异常,我决定做一个测试项目来导入我自己的插件。这是我的测试代码,用于测试他得到的客户理论如下。
System.IO.FileNotFoundException: Could not load file or assembly 'DevExpress.ExpressApp.v14.2, Version=14.2.7.0,
Our Plugin
[Export(typeof (ISomething))]
public class MyClass : ISomething
{
}
TESTER
class Program
{
[ImportMany]
public IEnumerable<ISomething> Somethings { get; set; }
static void Main(string[] args)
{
var rp = new Program();
rp.Run();
}
public void Run()
{
Compose();
}
public void Compose()
{
try
{
AppDomain.CurrentDomain.FirstChanceException += FirstChanceHandler;
AggregateCatalog aggregatecatalogue = new AggregateCatalog();
aggregatecatalogue.Catalogs.Add(new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
CompositionContainer container = new CompositionContainer(aggregatecatalogue);
CompositionBatch batch = new CompositionBatch();
batch.AddPart(this);
container.Compose(batch);
}
catch (Exception ex)
{
throw ex;
}
}
static void FirstChanceHandler(object source, FirstChanceExceptionEventArgs e)
{
System.Text.StringBuilder msg = new System.Text.StringBuilder();
msg.AppendLine(e.Exception.GetType().FullName);
msg.AppendLine(e.Exception.Message);
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
msg.AppendLine(st.ToString());
msg.AppendLine();
String desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string logFilePath = String.Format("{0}\{1}", desktopPath, "logfile.txt");
System.IO.File.AppendAllText(logFilePath, msg.ToString());
}
果然,我在输出中看到了window,发现确实是从GAC加载了这个DLL和ExpressApp相关的一些依赖。 问题:我如何确定在哪里以及为什么需要 ExpressApp? 我可以简单地只提供 DLL,但它会继续存在大量的依赖项,我知道为什么需要它们。
有用于检查托管程序集依赖项的工具。 MS Windows SDK 包含 ildasm.exe 实用程序。您可能已将其安装在:
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\ildasm.exe
当我遇到类似的问题(dll 版本不匹配)时,我还使用命令行中的 cygwin 'grep' 在所有 DX 和我们的自定义程序集中搜索缺少的依赖字符串以找到实际的 . dll 文件引用缺少的依赖 dll 版本。然后在ildasm.exe中打开,双击MANIFEST树节点。在那里我看到了对我没有的 .dll 版本的引用。
您可以按照相同的步骤尝试跟踪丢失的依赖项。 运行 "DevExpress.ExpressApp" 字符串搜索项目 bin 目录中的所有 DX dll 然后如果找到结果,使用 ildasm.exe
打开报告的文件请注意,很可能您没有安装 https://www.cygwin.com/ 软件包中的 'grep',因此请使用您可用的字符串搜索实用程序。
还有其他 3rd 方工具用于检查 dll 依赖性,但必须单独安装,而 ildasm.exe 是 Windows SDK 的一部分。请参阅此问题的其他工具参考答案:
How do I determine the dependencies of a .NET application?
更新:
如果您的 bin 文件夹中没有所有 DX 库,因为您的应用程序是一个插件并直接从 GAC 使用 DX 库,那么您可以直接在 DX 安装文件夹中搜索 DevExpress.ExpressApp 引用,就我而言:
C:\Program Files (x86)\DevExpress 15.2\Components\Bin\Framework
我已将上述文件夹内容复制到临时文件夹,删除了所有区域设置子文件夹以及所有 DevExpress.ExpressApp.* dll,然后 运行 命令:
grep -nr "DevExpress.ExpressApp"
产生了以下结果:
Binary file DevExpress.EasyTest.v15.2.dll matches
Binary file DevExpress.Persistent.Base.v15.2.dll matches
Binary file DevExpress.Persistent.BaseImpl.EF.v15.2.dll matches
Binary file DevExpress.Persistent.BaseImpl.v15.2.dll matches
Binary file DevExpress.Workflow.Activities.v15.2.Design.dll matches
Binary file DevExpress.Workflow.Activities.v15.2.dll matches
查看以上任何 dll 是否被您的插件或要部署插件的主机应用程序使用。
HTH