我正在使用预览,并尝试在我的计算机上本地部署的IIS Web应用程序中添加见解。它是一个在非常规应用程序池中运行的.Net 4.5应用程序。在添加见解后启动应用程序时,我遇到了以下异常:
无法加载文件或程序集' Microsoft.ApplicationInsights.Extensions.Intercept_x64.dll'或其中一个依赖项。该模块应该包含一个程序集清单。
我尝试了#34;启用32位应用程序"无论是真还是假都没有结果。
有没有人遇到过类似的错误?
答案 0 :(得分:0)
不幸的是,ASP.NET试图将\ bin中的所有内容加载为托管程序集 Microsoft.ApplicationInsights.Extensions.Intercept_x64.dll 不是托管程序集,但在这种情况下,ASP.NET Web App不应该以黄页失败,您只能在FusLogvw中看到它。
您使用任何网络发布吗? 您是否在发布时预编译了您的网站?
你能提供异常的完整堆栈跟踪吗?
答案 1 :(得分:0)
我还在测试这个,但我认为我已经解决了这个问题....
该解决方案基于与SQL Spatial Types native .dll解决方案相同的解决方案;如果你知道这一点,你会看到这个和那个包之间的相似之处。
Go在MVC项目中创建一个新的子目录,并在这两个子目录下创建;我用过:
MVCRoot ---> ApplicationInsights/x86
---> ApplicationInsights/x64
在每个目录下添加包目录中的链接项,即:
../ packages \ Microsoft.Diagnostics.Instrumentation.Extensions.Intercept.0.12.0-build02810 \ lib \ native \ x64 \ Microsoft.ApplicationInsights.Extensions.Intercept_x64.dll
和
../ packages \ Microsoft.Diagnostics.Instrumentation.Extensions.Intercept.0.12.0-build02810 \ lib \ native \ x86 \ Microsoft.ApplicationInsights.Extensions.Intercept_x86.dll
分别
然后我将此代码添加到' root'中的文件中。 AppplicationInsights文件夹名为loader.cs,如下所示:
using System;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
namespace ApplicationInsights
{
/// <summary>
/// Utility methods related to CLR Types for SQL Server
/// </summary>
internal class Utilities
{
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr LoadLibrary(string libname);
/// <summary>
/// Loads the required native assemblies for the current architecture (x86 or x64)
/// </summary>
/// <param name="rootApplicationPath">
/// Root path of the current application. Use Server.MapPath(".") for ASP.NET applications
/// and AppDomain.CurrentDomain.BaseDirectory for desktop applications.
/// </param>
public static void LoadNativeAssemblies(string rootApplicationPath)
{
var nativeBinaryPath = IntPtr.Size > 4
? Path.Combine(rootApplicationPath, @"ApplicationInsights\x64\")
: Path.Combine(rootApplicationPath, @"ApplicationInsights\x86\");
CheckAddDllPath(nativeBinaryPath);
// LoadNativeAssembly(nativeBinaryPath,
// IntPtr.Size > 4
// ? "Microsoft.ApplicationInsights.Extensions.Intercept_x64.dll"
// : "Microsoft.ApplicationInsights.Extensions.Intercept_x86.dll");
}
public static void CheckAddDllPath(string dllPath)
{
// find path to 'bin' folder
var pathsToAdd = Path.Combine(new string[] { AppDomain.CurrentDomain.BaseDirectory, dllPath });
// get current search path from environment
var path = Environment.GetEnvironmentVariable("PATH") ?? "";
// add 'bin' folder to search path if not already present
if (!path.Split(Path.PathSeparator).Contains(pathsToAdd, StringComparer.CurrentCultureIgnoreCase))
{
path = string.Join(Path.PathSeparator.ToString(), new string[] { path, pathsToAdd });
Environment.SetEnvironmentVariable("PATH", path);
}
}
private static void LoadNativeAssembly(string nativeBinaryPath, string assemblyName)
{
var path = Path.Combine(nativeBinaryPath, assemblyName);
var ptr = LoadLibrary(path);
if (ptr == IntPtr.Zero)
{
throw new Exception(string.Format(
"Error loading {0} (ErrorCode: {1})",
assemblyName,
Marshal.GetLastWin32Error()));
}
}
}
}
然后我将此添加到global.asax中:
protected override void Application_Start(object sender, EventArgs e)
{
ApplicationInsights.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
}
到目前为止,到目前为止我似乎已经通过了事件。如果我发现我所做的事情有问题,所有人都会回来更新。
至少MVC应用程序现在开始: - )
更新:这不是故事的结尾: - (
我还必须修改程序包的build目录下的Microsoft.Diagnostics.Instrumentation.Extensions.Intercept.props文件,使其不包含bin目录中的文件。
当我完成时,它看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)\..\lib\native\x86\Microsoft.ApplicationInsights.Extensions.Intercept_x86.dll">
<CopyToOutputDirectory>None</CopyToOutputDirectory>
</None>
<None Include="$(MSBuildThisFileDirectory)\..\lib\native\x64\Microsoft.ApplicationInsights.Extensions.Intercept_x64.dll">
<CopyToOutputDirectory>None</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
我必须将此软件包签入我的源代码管理系统,因为我认为我现在将面临继续构建恢复该软件包的新副本的问题。 ;想要。
我无法等待MS为此提出正确的解决方法。
答案 2 :(得分:0)
我刚刚遇到过这个问题,几个小时后发现这是由于与FluentSecurity发生冲突。
此处详细说明:https://github.com/kristofferahl/FluentSecurity/issues/70
解决方法是在调用SecurityConfigurator.Configure()之前添加以下行:
SecurityDoctor.Current.EventListenerScannerSetup = scan =>
{
scan.ExcludeAssembly(file => Path.GetFileName(file).Equals("Microsoft.ApplicationInsights.Extensions.Intercept_x64.dll"));
scan.ExcludeAssembly(file => Path.GetFileName(file).Equals("Microsoft.ApplicationInsights.Extensions.Intercept_x86.dll"));
};
希望这有助于其他人。
答案 3 :(得分:0)
我的内部异常指向WebActivator。所以我Uninstall-Package WebActivator -Force
,在Application_Start中添加了适当的调用,一切都很好。
答案 4 :(得分:0)
我刚删除了/ bin文件夹中的所有内容,似乎已经解决了问题。不知道发生了什么或什么,这是一个我多年没有触及过的项目。但它解决了它:)