BindingFailure was detectedMessage with Mono.Addins - c#

I'm using Mono.Addins for my project. Here my code :
static void Main()
{
string modulepath = String.Format("{0}\\{1}", Loader.GetCurrentDirectory(), "modules");
AddinManager.Initialize(modulepath, modulepath);
AddinManager.Registry.Update(null); //**Error in here**
}
I'm get an error :
The assembly with display name 'Mono.Addins.CecilReflector' failed to load in the 'Load' binding context of the AppDomain with ID 2. The cause of the failure was: System.IO.FileNotFoundException: Could not load file or assembly 'Mono.Addins.CecilReflector, Version=0.6.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756' or one of its dependencies. The system cannot find the file specified.
File name: 'Mono.Addins.CecilReflector, Version=0.6.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756'
Any ideas to solve this problem. Thank in advance.

Yeah my problem is solved by copy file Mono.Addins.CecilReflector to application path. Thank Ieppie.

Related

UIAComWrapper assembly is throwing error while building solution

Automation solution is cleaning and building properly but while building it using build definition its throwing error,
Its checking with the file on location where we are saving the builded solution .dll files and throwing error:
Desktop\Pages\NewFieldPropertiesPage.cs(729,45): error CS1705: Assembly 'Aptean.Windows.Automation' with identity 'Aptean.Windows.Automation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'UiaComWrapper, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' which has a higher version than referenced assembly 'UiaComWrapper' with identity 'UiaComWrapper, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' [C:\agent-DGA1BDT04TFS13_work\1\s\Respond.Test.Base\Respond.Test.Base.csproj]
This is how we define automation element:
and getting error findin "AutomationElement" and "PropertyCondition" which is coming from "System.Windows.Automation" assembly
``` {
``` get
``` {
``` AutomationElement root = AutomationElement.RootElement;
``` PropertyCondition PropApplicaionRoot = new PropertyCondition(AutomationElement.AutomationIdProperty, "MainForm");
``` AutomationElement ApplicationRoot = root.FindFirst(TreeScope.Subtree, PropApplicaionRoot);
``` PropertyCondition PropSideMenuRoot = new PropertyCondition(AutomationElement.AutomationIdProperty, "pnlObjectAndFieldDetails");
``` AutomationElement SideMenuRoot = ApplicationRoot.FindFirst(TreeScope.Subtree, PropSideMenuRoot);
``` PropertyCondition propEntitiesAndFields = new PropertyCondition(AutomationElement.NameProperty, "Boolean Field 135374");
``` AutomationElement OKButton = SideMenuRoot.FindFirst(TreeScope.Subtree, propEntitiesAndFields);
``` return OKButton;
``` }
``` }
Below is the error i am getting, one of the error statement:
Respond.Test.Base\Desktop\UIMap\SelectSkillPageMap.cs (30, 45)
Respond.Test.Base\Desktop\UIMap\SelectSkillPageMap.cs(30,45): Error CS1705: Assembly 'Aptean.Windows.Automation' with identity 'Aptean.Windows.Automation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'UiaComWrapper, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' which has a higher version than referenced assembly 'UiaComWrapper' with identity 'UiaComWrapper, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
Actually we are checking in the correct file and solution was also building, while digging deep in the error mentioned,
It was only failing when building using the source solution in a VM, where when getting latest was not changing the reference file.
Deleted the solution from the location and then ran the VNext build has resolved the issue as this time it took the latest versions of .dll files from source.
Thanks.

Could not load file or assembly but they are loaded

I have a project going on witch uses a DLL from an ERP system.
The DLL is used to get information from the ERP, like invoices and such.
The error i am getting is:
Inner Exception 1: FileNotFoundException: Could not load file or
assembly 'SnelStartGatewayInterface, Version=12.48.37.0,
Culture=neutral, PublicKeyToken=null' or one of its dependencies. The
system cannot find the file specified.
But in the same window I used 'watch 1' to see the current using assembly's with the method:
AppDomain.CurrentDomain.GetAssemblies()
It returns a couple of assembly's.
This is the one loaded in and exactly the same as seen in the error:
+ [36] {SnelStartGatewayInterface, Version=12.48.37.0, Culture=neutral, PublicKeyToken=null} System.Reflection.Assembly
{System.Reflection.RuntimeAssembly}
Why would it return me the error?
Ps. I have tried the exact same method and dll in a windows forms test app and it was running fine.
Like Pawl Lukasik mentioned in the comments, you should look at the dependencies.
To do this, use:
private List<string> ListReferencedAssemblies()
{
List<string> refList = new List<string>();
var assemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies();
foreach (var assembly in assemblies)
{
refList.Add(assembly.Name);
}
return refList;
}
to see all referenced assemblies.
Or with LINQ:
private List<string> ListReferencedAssemblies()
{
return Assembly.GetExecutingAssembly().GetReferencedAssemblies().Select(x => x.FullName).ToList();
}

Instantiating a class produces ReflectionTypeLoadException at Assembly.GetTypes()

I discovered that after my application generates Telerik report
var result = new ReportProcessor().RenderReport("PDF", new InstanceReportSource { ReportDocument = new MyTelerikReport(data) }, null);
var stream = new MemoryStream(result.DocumentBytes);
return CreateHttpFileResponse("MyReport.pdf", stream, "application/pdf");
I am not able to get all types within CurrentDomain
var typesWithAttribute = (from a in AppDomain.CurrentDomain.GetAssemblies()
from t in a.GetTypes() //error appears here
//some filtering logic
select t).ToList();
I am getting error
System.Reflection.ReflectionTypeLoadException: Unable to load one or
more of the requested types. Retrieve the LoaderExceptions property
for more information.
LoaderExceptions:
System.IO.FileNotFoundException: Could not load file or assembly
'DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The
system cannot find the file specified. File name:
'DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35'
After some investigation I found that assembly that fails to load: Telerik.Reporting.OpenXmlRendering, Version=8.0.14.311, Culture=neutral, PublicKeyToken=a9d7983dfcc261be and that assembly doesn't exists in AppDomain.CurrentDomain.GetAssemblies() before I generate report (I assume that assembly loaded dynamically by Telerik.Reporting, Version=8.0.14.311, Culture=neutral, PublicKeyToken=a9d7983dfcc261be).
I could filter out that assembly as I don't need any types from that but I am a bit worried about fact of having assemblies in domain that cannot be loaded - seems a bit wrong to me.
Could someone explain what there happens? Is it my issue or that is fault of 3rd party library that doesn't load all required assemblies?
The issue is not the assembly but the Type coming from a dependent assembly that has not been loaded.
If the GetTypes method is called on an assembly and a type in that assembly is dependent on a type in an assembly that has not been loaded (for example, if it derives from a type in the second assembly), a ReflectionTypeLoadException is thrown.
http://msdn.microsoft.com/en-us/library/system.reflection.assembly.gettypes(v=vs.110).aspx

Service reports 'cannot find the file specified' for a file that exists

I'm writing C# code that can run either as a console app or a service. When run as a console app, it works fine. When run as a service I'm getting an odd error.
On startup, my service spawns a thread and this thread searches a directory for plugin .dll's that implement some of the service's functionality. I enumerate the files in the plugin directory, then for each file found, attempt to load the assembly and determine if it implements a desired interface.
This architecture is described here: http://code.msdn.microsoft.com/windowsdesktop/Creating-a-simple-plugin-b6174b62
I'm finding that I can enumerate all of my plugins, but when I call Assembly.GetTypes(), I get a LoaderException with the message: "Could not load file or assembly 'MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified."
Well, that's bunk because in the line of code just before this one, the file was enumerated from a call to Directory.GetFiles(path, "*.dll"). Remember, this code also works find when run as a console app.
My service is running as Local System and the SYSTEM account has full permissions to the files, as do Administrators. Per this page, Local System's token includes both the NT AUTHORITY\SYSTEM and BUILTIN\Administrators SID, so I don't think it's a filesystem permissions issue.
I'm flummoxed. Can anyone suggest a cause and a solution?
Here's the code (it looks long but a lot of it is logging):
private void LoadPlugins()
{
lstPlugins = new List<MyDesiredInterface>();
string path = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
path += "\\PlugIns";
if (Directory.Exists(path))
{
Log("PlugIns folder exists.", TAG);
string[] dllFileNames = Directory.GetFiles(path, "*.dll");
ICollection<Assembly> assemblies = new List<Assembly>(dllFileNames.Length);
foreach (string dllFile in dllFileNames)
{
AssemblyName an = AssemblyName.GetAssemblyName(dllFile);
Assembly assembly = Assembly.Load(an);
assemblies.Add(assembly);
}
Log("Found " + assemblies.Count + " assemblies.", TAG);
Type pluginType = typeof(MyDesiredInterface);
ICollection<Type> pluginTypes = new List<Type>();
foreach (Assembly assembly in assemblies)
{
if (assembly != null)
{
Log("Evaluating assembly: " + assembly.Location, TAG);
try
{
Type[] types = assembly.GetTypes(); <-- error happens here
foreach (Type type in types)
{
if (type.IsInterface || type.IsAbstract)
{
Log("Assembly does not implement our interface.", TAG);
continue;
}
else
{
if (type.GetInterface(pluginType.FullName) != null)
{
Log("Assembly implements our interface!", TAG);
pluginTypes.Add(type);
}
}
}
}
catch (ReflectionTypeLoadException ex)
{
StringBuilder errMsg = new StringBuilder("An exception occurred tying to load types in an assembly.\r\n");
errMsg.Append("The assembly is: " + assembly.Location + "\r\n");
errMsg.Append("Exceptions are:\r\n");
foreach (Exception e in ex.LoaderExceptions)
{
errMsg.Append(e.Message + "\r\n");
}
Log(errMsg.ToString(), TAG);
}
}
}
foreach (Type type in pluginTypes)
{
MyDesiredInterface plugin = (MyDesiredInterface)Activator.CreateInstance(type);
this.Log("Loading plugin: " + plugin.CommandName(), TAG);
plugin.Register(this);
lstPlugins.Add(plugin);
}
this.Log("Total plugins loaded: " + lstPlugins.Count, TAG);
}
else
{
Log("PlugIns folder not found.", TAG);
}
}
Here's the log file:
3/12/2014 9:53:46 AM chatInterface LoadPlugIns()
3/12/2014 9:53:46 AM chatInterface PlugIns folder exists.
3/12/2014 9:53:46 AM chatInterface Found 13 assemblies.
3/12/2014 9:53:46 AM chatInterface Evaluating assembly: C:\Users\MyUsername\Documents\Visual Studio 2010\Projects\MyProject\MyProjectService\bin\Debug\PlugIns\PlugIn1.dll
3/12/2014 9:53:46 AM chatInterface An exception occurred tying to load types in an assembly.
The assembly is: C:\Users\MyUsername\Documents\Visual Studio 2010\Projects\MyProject\MyProjectService\bin\Debug\PlugIns\PlugIn1.dll
Exceptions are:
Could not load file or assembly 'MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
3/12/2014 9:53:46 AM chatInterface Evaluating assembly: C:\Users\MyUsername\Documents\Visual Studio 2010\Projects\MyProject\MyProjectService\bin\Debug\PlugIns\PlugIn2.dll
3/12/2014 9:53:46 AM chatInterface An exception occurred tying to load types in an assembly.
The assembly is: C:\Users\MyUsername\Documents\Visual Studio 2010\Projects\MyProject\MyProjectService\bin\Debug\PlugIns\PlugIn2.dll
Exceptions are:
Could not load file or assembly 'MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
It was suggested that I use the Assembly Binding Log Viewer (fuslogvw.exe) to log the failures. Here's what that log shows:
*** Assembly Binder Log Entry (3/13/2014 # 9:50:30 AM) ***
The operation was successful.
Bind result: hr = 0x0. The operation completed successfully.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable C:\Users\MyUsername\Documents\Visual Studio 2010\Projects\MyProject\MyProjectService\bin\Debug\MyProjectService.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = NT AUTHORITY\SYSTEM
LOG: Where-ref bind. Location = C:\Users\MyUsername\Documents\Visual Studio 2010\Projects\MyProject\MyProjectService\bin\Debug\PlugIns\MyPlugIn.dll
LOG: Appbase = file:///C:/Users/MyUsername/Documents/Visual Studio 2010/Projects/MyProject/MyProjectService/bin/Debug/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = NULL
Calling assembly : (Unknown).
===
LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: No application configuration file found.
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Attempting download of new URL file:///C:/Users/MyUsername/Documents/Visual Studio 2010/Projects/MyProject/MyProjectService/bin/Debug/PlugIns/MyPlugIn.dll.
LOG: Assembly download was successful. Attempting setup of file: C:\Users\MyUsername\Documents\Visual Studio 2010\Projects\MyProject\MyProjectService\bin\Debug\PlugIns\MyPlugIn.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: MyPlugIn, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
LOG: Re-apply policy for where-ref bind.
LOG: Binding succeeds. Returns assembly from C:\Users\MyUsername\Documents\Visual Studio 2010\Projects\MyProject\MyProjectService\bin\Debug\PlugIns\MyPlugIn.dll.
LOG: Assembly is loaded in LoadFrom load context.
In this test run, I was using Assembly.LoadFrom() instead of Assembly.Load(), but in both cases the assembly loads. This log shows it in LoadFrom load context, I have other runs that show it in Load load context with the other call. In any case, the load succeeds, but attempting to enumerate GetTypes fails with "The system cannot find the file specified."
Any help would be appreciated!
Please check if you are referencing an assembly which in turn referencing an older version. Delete, rebuild and re-referencing might help.
"FuseLogVw" is helpful to find who is loading your assemblies, define the log path, and run your solution, then check first line in FuseLogVw
From http://msdn.microsoft.com/en-us/library/ky3942xh(v=vs.110).aspx:
"FileLoadException is thrown if assemblyString specifies the full assembly name, and the first assembly that matches the simple name has a different version, culture, or public key token. The loader does not continue probing for other assemblies that match the simple name."
So are there multiple versions of the assembly present?

Exception setting up handler for AppDomain.AssemblyResolve

Create a new appdomain, setup the assemblyResolve handler and
you always get an exception saying 'assembly [current executing assembly] not found'
what gives ? code is below
string _fileName = #"c:\temp\abc123.dll";
AppDomain sandBox = AppDomain.CreateDomain("sandbox");
sandBox.AssemblyResolve += new ResolveEventHandler(sandBox_AssemblyResolve);
// the line generates the exception !
System.Reflection.Assembly asm = sandBox.Load(System.Reflection.AssemblyName
.GetAssemblyName(fileName).FullName);
foreach (System.Reflection.AssemblyName ar in asm.GetReferencedAssemblies())
dbgWrite("Ref: " + ar.FullName );
System.Reflection.Assembly sandBox_AssemblyResolve
(object sender, ResolveEventArgs e)
{
System.Reflection.Assembly asm =
System.Reflection.Assembly.LoadFrom(_fileName);
return asm;
}
exception is:
System.IO.FileNotFoundException: Could not load file or assembly 'appAdmin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified. File name: 'appAdmin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' [snip]
Your resolver may not fire on your new AppDomain, try setting it on the AppDomain.CurrentAppDomain instead.
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(sandBox_AssemblyResolve);
In the sandBox_AssemblyResolve method you can load the assembly up from whatever directories you like, this is where the load from a byte[] may come into play.
As for the loading of an Assembly using byte[] this fixes file locking issues, it won't fix what ails you I don't think see here
You're trying to load assemblies that aren't under the AppDomain's base location. I've never had the AssemblyResolve event work for me, either.
I'd suggest loading your out-of-base assembly into a byte array (System.IO.File.ReadAllBytes) and then hand that array to your newly created AppDomain to load.

Categories

Resources