WebService not loading dll from PATH environment variable - c#

I'm hoping someone else has encountered this problem because it's driving me crazy. I have a Web Service that needs to use DLLs in a folder that I have specified in the PATH environment variable (via DLLImport). When I run the service in the development server it works with no problem, if I run the method in a console application it works with no problem. When I publish the service to my IIS and try the method I get:
Unable to load DLL 'WORKFLOW.DLL': The specified module could not be found.
I even created a WebMethod to return the specified Environment variable for testing:
[WebMethod]
public String GetEnv(String variable)
{
return Environment.GetEnvironmentVariable(variable);
}
and this returns exactly what I need it to, even when running from IIS, but still its not loading the DLLs. I've been searching all over and can't seem to find anyone with this issue.
Any help would be greatly appreciated.

It's a security problem. It doesn't let you just load the DLL like that.
You need to add references in your Web App to those dlls, then those target dlls get copied to your bin folder and you should be okay. Or those DLLs are not registered in the GAC and there are problems there.

Related

Can't run a windows form app on other PC, can't find a dll from a project of the same solution

(First things first, I'm kind of new on this type of programming)
I'm trying to make a windows form application where i request data from a PLC so it can be stored in a access database. This application is going to be running on a different computer.
On the solution i created and besides my project I'm using an existing project that works "like" the communication between the app and the PLC, it is called LibplctagWrapper (on my main project I create a reference to this last one)
(https://www.mesta-automation.com/how-to-communicate-to-an-allen-bradley-plc-with-c-and-libplctag-ethernet-ip-library/),
and it works on my PC, but every time y copy the Bin folder to the new computer, then run the app, it opens, but a warning popup messages appears. Saying: Unable to load DLL "plctag.dll": The specified module could not be found. (Exception from HRESULT: 0x8007007E).
The LibplctagWrapper is in another directory than my Solution and Main Project so I moved it to C: so the direction will be the same on the new computer. But it doesn't work.(copy the LibplctagWrapper in C: of the new pc as well)
Moved the entire solution/main project to C: as well... the same result.
Instead of just the bin folder i copied the entire project folder... im thinking the problem goes with the fact that the LibplctagWrapper is not in the same direction? but I don't know how to place it in the same direction... I search on visual studio but I never saw the option to move it.
Unable to load DLL "plctag.dll": The specified module could not be found. (Exception from HRESULT: 0x8007007E).
This error message is quite generic, missing dependencies can cause it as well as the mentioned module not being present at all. Check the Dependency Walker ( http://www.dependencywalker.com/) to discover required C++ runtimes or something alike. Remember to take x86/x64 into consideration.
#JavierMata - I think you have probably resolved this issue, but for others encountering something similar you can use the recently released official wrappers which can be downloaded via nuget. Github link: https://github.com/libplctag/libplctag.NET
The libplctag.NativeImport package handles loading the appropriate C runtime so you don't have to.

An attempt was made to load a program with an incorrect format whenever i try to browse service from IIS

I am trying to browse an WCF servcice but whenever I browse the .SVC file, I always get the error as:
Could not load file or assembly 'ExternalBinaries.Boost' or one of its dependencies. An attempt was made to load a program with an incorrect format
Although I've tried all the steps to resolve this via all the previous posts related to it but without luck. Below are the steps that I followed:
Set Enable 32 bit applications to True in IIS
Setting the Target CPU to AnyCPU,X64 & X86 in visual studio
Copying the required DLL's to the specified location.
Rebuild the Application, Restart VS2015
None of the above steps yielded result. Can anybody guide to take this forward

Getting "The type name or alias FooController could not be resolved" on different server

Does anyone have any tips on how I might track down the root cause of this error:
The type name or alias FooController could not be resolved
I have an ASP.net MVC web application using Unity. My application runs fine locally. However, when I publish the site to a remote server, I get the error above.
I tried on two different remote servers and got the same error. However, when I published the site to a different directory on my local dev box, it works just fine. So, I copied the local working copy to the remote server(s). I get the same exact error. I re-arranged the order of the controllers in the Unity config file and the error will always show the first controller in the file. That is, if I move the type registration for BarController above FooController, the error will show:
The type name or alias BarController could not be resolved
So it appears that anytime a controller is encountered in the Unity configuration file, it fails, but only on the remote servers. It problem doesn't seam to be tied to a specified controller.
Therefore, it seams the problem is environmental. Perhaps the remote servers are missing something in the GAC, that I have on my local dev box. I ran though the references and didn't see anything new added since our last release, but I could be missing something.
Does anyone have any tips on how I can track down the root cause of this problem? The error message doesn't tell me much. I need to know why the FooController could not be resolved.
I solved the problem. I setup a development environment on one of the remote servers. I noticed a problem with one of the references in the web project. The MVC assembly needed to be fixed. So I removed and re-added it. Worked like a charm.
Looking at the change this made, here's what I saw:
The code on the left is my local dev box. It was referencing version 3.0.0.1 and the code on the right is after I fixed the reference on the remote server. It is referencing version 3.0.0.0.
It seams my local dev box had some strange version of ASP.net MVC installed. So I uninstalled it, and reinstalled from the latest published version and republished the code from the local dev build and it worked fine.
After look into this even further, this appears to be the root cause of the problem to begin with:
Windows update caused MVC3 and MVC4 stop working

Parser Error Message: Could not load type 'sometype'

I am experiencing an error that I am unable to resolve for some time now. I was wondering if someone can help identify the cause of this error? I am completely new to asp / asax. After some research, I think that the error I am getting is due to the web application trying to use outdated code. I was thinking to rebuild the c# file using Visual Studio and/or the entire project. However, I am completely new to C# and asp, and was wondering can give me some suggestions if this may fix the problem and/or if there is an possible alternate solution.
Error message
Parser Error Message: Could not load type 'Inventory1.Global'.
Source Error: <%# Application Codebehind="Global.asax.cs" Inherits="Inventory1.Global" %>
Entire Global.asax contents:
<%# Application Codebehind="Global.asax.cs" Inherits="Inventory1.Global" %>
Try replacing CodeBehind with CodeFile
Could not load type
means that a type could not be loaded. (In this case, "type" refers to Inventory1.Global). Types are located in compiled DLLs. So, either the DLL isn't available, is out of date, or doesn't contain a public type with the given name.
Some possible causes are:
You have no type declared with the given name. For your example, you should have the following:
namespace Inventory1 {
public class Global {
...
}
}
Note: avoid names like Inventory1. They imply that there is an Inventory2, Inventory3, etc., which is bad practice as they're abmiguous and not very descriptive. Also, Global is pretty vague, and may introduce confusion with the global namespace.
Make sure your cases match (Inventory1, not INVENTORY1.)
You haven't compiled the project. In VS, rebuild the solution.
The assembly that declares the class has a compilation error, so the relevant DLL is either missing or out of date. Make sure you've resolved all errors.
The class is not marked as public.
If I had to guess, I'd put my money on a compilation error. Unlike PHP and other interpreted languages, C# have to be successfully compiled before they can be used.
I had this error , just needed to rebuild the project
I faced this issue and i got the solution from here and i would like to share it.
SOLUTION
Empty the bin folder. Build all the dependent class libraries and refer them in the main project and build the complete solution.
I did this and it worked like a charm for me !!
After scouring around for what could have caused this I found a few things that I needed to do to get my project running...
(Note: You may not need to do all of these - it is a case-by-case thing)
If you did any changes from IIS Express to Local IIS you may need to change the build configuration from bin/debug to bin. (Right click on solution >> Properties >> Build >> Output)
If you have a URL rewrite then you will need to install URL rewrite on your Local IIS.
Navigate to your applicationhosts.config file (usually it's some place like C:\Users\username\Documents\IISExpress\config) and rename the file to applicationhostsOLD.config.
Clean and rebuild your project. You may need to go manually empty out the bin.
Now you should be good to go.
Since it was only happening with IISexpress, changing output from bin\Debug\ to bin\ solved it for me. Changing tag CodeBehind to CodeFile only created even more problems.
This happened with me on my local machine. The issue was incorrect IISExpres config.
If you are getting this issue on your local environment (Visual Studio debug runs), check the IIS Express config file. Make sure your local site/application path is pointing to the correct location.
The configuration file is called applicationhost.config. It's stored here:
My Documents > IIS Express > config . Usually (not always) one of these paths will work:
%userprofile%\documents\iisexpress\config\applicationhost.config
%userprofile%\my documents\iisexpress\config\applicationhost.config
It can't find the necessary file in dll assembly.
Rebuild the project, Rebuild the solution and then try it again.
I added a new build profile and that defaulted to output of
/bin/[new profile name] and when i was running debugger it was trying to look to just /bin
It's likely that you renamed something. Check the Global.asax.cs file for the class declaration and make sure that the namespace and class name match exactly what's in the asax file. This includes case! Can you copy/paste the namespace and class declaration of the .cs file into a post here so that we can compare?
Parser Error Message: Could not load type __
After doing everything suggested in the comments above, with no luck, refreshing (uploading) the contents of /bin to the server worked. The files uploaded to bin are the: dll, pdb and xml. Don't know which one did it.
The problem I had here was induced by renaming a file (_.aspx) in Solution Explorer.
Rebuilding/re-publishing my project/solution to the server did nothing to help me, and I doubt that will help that many out of this predicament. For me, I did a few things to troubleshoot this that eventually got me out of this "hole".
I had been trying to use a binding on the web site, but this wasn't working. I tried calling the site with http://localhost/Report.aspx (this was my homepage, which I opted to not call Default.aspx - I was going to update the "Default Documents" section with the name later) when I got the Parser Error the OP saw. So I tried some things:
I stopped the old project's website and built another, simple web project, that had "hello" and a label on the page and nothing else. I had a line in the Page_Load to populate the label's Text property with "world!", just to make sure that part was working. I created a new website on port 80 and transferred the published contents of my site to the server. So even though I had .NET 4.5 installed on the server (and had ran the aspnet_regiis -i command from the 4.0 directory) and the App Pool in IIS that I was using for this new project was set to 4.0, the browser complained about the web.config having a targetFramework=4.5.2 in it, which is Visual Studio 2015's default framework. So I installed .NET 4.6 (NDP46-KB3045557-x86-x64-AllOS-ENU.exe), restarted the server, and then my simple site worked. So then I deleted this site - all I wanted to do was prove my installation steps were accurate and the server could run a site.
So then I went back to my original project/site - I deleted and re-created the web site. I put the Application Pool to the one I had originally created for this, which I ensured was running .NET 4.0. Once I did this, I navigated to my site and everything worked when using http://localhost/Report.aspx. So it seems to me what causes this is what version of the .NET Framework you are using.
I tried all the solutions listed above and none of them worked. I finally created a new web page (webform) and copy blocked all the code (cs and aspx files) into it from the old one, deleted the old cs and aspx file, recompiled, and now I'm back in business. I know it makes no sense. It should not have mattered, but it worked.
Please try to open your project as Project/Solution, most probably it will resolve the error. This type of error Could not load type.... occurs when we try to open project as website.
I have tried to open my project as solution and it resolved my problem.
Please check namespace and class name at all places, In one case, One team member changed namespace and I was using old namespace in .aspx file. It was causing issue. I updated namespace and it got working.
I was fixing my namespaces in our Base Project, and I started seeing this error on another project that references it after that. I had to remove the reference to the Base Project and re-add it and then it started working again.
I just got this error today. It turns out that it was because I reverted by mistake the project file to an older version that didn't include the page anymore.
I had the same issue after renaming an aspx page Visual studio renamed it but dropped the namespace. Make sure the Inherits property contains the fully Qualified name including the namespace.
If you just added the new aspx File, rebuild the project it is located in. The problem comes from your Code Behind file that isn't compiled at the moment, therefore you want to access a newer page that doesn't exist in your current compiled project dll
I had this problem on the remote server, but not on my local server. After trying everything and nothing working, I finally resolved it. My domain name was pointing to a directory under another domain. I had originally built the website independently in Visual Studio as its own project. No matter what I did, it wasn't working anymore. So I moved it to a folder inside of the project for the main domain name and uploaded it as part of the main project.
For example, I have say domain name AAA.com with a website of its own. And then I also have BBB.com that points to a directory under AAA.com's main directory. Originally I had separate VS projects for AAA.com and BBB.com, but that wasn't working anymore. So I had to move all of BBB.com's files to the AAA.com project and set it up exactly like it appears on the remote server. For some reason, that worked.
Try This It will Definitely work :-
Parse Error:
May be you Class name is not matched with the webform name

Old references never die

I'm able to run an asp.net application using a console host to host my services. This works fine.
When I install the services to a server and then attempt to access them with my application, I get an error when running my search function (it's a search application) I used to be doing it using a stored procedure that is dynamically created which was using Microsoft.SqlServer.Management.Sdk.Sfc.dll to create a sql server object and create a stored procedure. Now I'm doing it without a stored procedure and so I no longer need this reference. However, when I try to run my search function with the services installed on the server, it keeps failing because it can't find this file. I've emptied all my bin and obj directories, cleaned the services solution and the asp.net application solution, but it keeps looking for this reference.
I even searched my computer for this file and it was only found in its original location (C:\Program Files\MicrosoftSqlServer\100\SDK\Assemblies). I don't know what else to do to tell my program I no longer care about this reference.
Please help if you can! Thanks very much in advance.
The assembly may still be referenced in your web.config file.
Did you remove the reference to that DLL in your References?

Categories

Resources