assemblyBinding probing is not working - c#

Sorry if this question have been asked already. But I have two websites, One have already webconfig. and I have added other site directory as virtual directory inside first site.
Like below, SampleSite is the Site Name and I have added Sample as Virtual Directory from another location (c:\Sample). Now it has web subdirectory, in which Ver1.0 is another Site, which have its own dll and data.
Now I am launching SampleSite and after some event i want to launch Ver1.0 Site URL. When i launch Ver1.0 Site URL (localhost/SampleSite/Sample/web/VER1.0/default.aspx) then it gives me error of DLL function. That means DLL is not included here. So i added dll in Ver1.0 web.config as
<assemblyBinding xmlns="urn:Schemas-microsoft-com:asm.v1">
    <probing privatePath="bin/Sample.Web.dll;" />
</assemblyBinding>
Bin is in Ver1.0 folder, which have Sample.Web.dll
But still its showing me same error from DLL function. So please help me to resolve this functionality.
Note: I tried to make the Ver1.0 as Application Directory then its resolving the problem. But i want to make this dynamic. Because Ver1.0 could be any Site in future.
EDIT:
Adding Inside folder of Ver1.0, Bin has Sample.Web.dll, which i want to include.

According to documentation you should place all paths to subdirectories that should be considered by Fusion engine while searching for assembly inside privatePath attribute value.
If you want to probe for libraries that are placed inside Sample\web\Ver1.0\bin and Sample\web\Ver1.1\bin subdirectories it should be like this:
<probing privatePath="Sample\web\Ver1.0\bin;Sample\web\Ver1.1\bin" />

Related

Probing the assembly from parent directory of the exe

i have a folder structure as IntegrationClient\SampleClient\Client.Exe. I have created a folder DrawingClient with lot of thirdparty assemblies. For client.exe to find the assembly at runtime , i have used probing path as below and it works.
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin;DrawingClient;"/>
</assemblyBinding>
But if i need the client.exe to find the DrawingClient folder from parent directory ie under IntegrationClient\DrawingClient, can i achieve that by any means ? I tried using ..\DrawingClient however that failed.
Sadly, you cannot...
The MSDN Documentation states that privatePath [...] [s]pecifies subdirectories of the application's base directory that might contain assemblies. [...]
Firstly I'm pretty sure you have to use forward slashes rather than backslashes.
In addition to that you can chain your ../ lookups as far back up the directory tree you need to go
Example:
this ../ is the Parent Directory and this
../../ is the Grand-Parent directory and so forth...

VS2010 DLLs not updating

I have a solution (ASP.NET, .NET 4.0) that doesn't seem to be updating its dlls properly. I noticed that, when I compile it after making changes, it doesn't see the additions that I've made.
I recently switched the targeted platform on the solution to x86, because we're now deploying it onto a x64 server and I am now maintaining it on a x64 Win7 machine. (I don't know if that might have something to do with it, see below.) After I isolated the problem, when I was testing, I found out that if I chose "view in browser" on one of the aspx files, it suddenly saw the changes that I had made earlier. I combed through the directories in the main project's bin folder, and I noticed dlls were being saved to two different places: the root of the bin folder, and bin/x86/debug/. The first location was getting updated when I simply compiled the solution, and the second was getting updated when I used "view in browser" on one of the aspx files.
Does anyone know of an errant setting which might cause this behavior?
Update: The answer provided by #Vinkal leads me to believe that Debug is looking at the bin/ folder for compiled code rather than bin/x86/debug/, where the code is being compiled to. Is it possible that could be the core problem?
I combed through the directories in the main project's bin folder, and
I noticed dlls were being saved to two different places: the root of
the bin folder, and bin/x86/debug/. The first location was getting
updated when I simply compiled the solution, and the second was
getting updated when I used "view in browser" on one of the aspx
files.
Check Configutation Manager as to what platform is selected as shown in the below screen shot#1.
Screen shot #1: Configuration Manager
if you create the new platform (here x86), Output Path is automatically set to bin\x86\Debug\. See the screenshot below.
Screen shot #2: Build Settings when Project Properties is selected
So when you compile the project, Binaries will be copied according to Output Path (here in my case, bin\x86\Debug\ for the Platform x86 which is set in Platform Target). Confirm as shown in the screen shot below, where all binaries are copied when you compile. As you have mentioned, when you compile the solution, Root of the bin folder is getting updated. So your project Output Path must be set to Root of the Bin folder for the whatever Platform (Any CPU, x86 or x64) you have set in Platform Target
Note: If Post-Build event commmand is set to copy Binaries, it will also be copied to the Path specified in Post-Build event command.
View in Browser: When page is opened using View in browser, page will again be compiled and Binaries are copied according to the Output Pathspecified in Project Properties as shown in the screen shot #2. As you have mentioned that bin\x86\Debug\ is updated when you view the page in Browser, it indicates that Output Path is set to bin\x86\Debug\ in your Project Properties, In the screen shot shown below, when page is opened using View in Browser, Binary is going to Bin folder and Platform is selected as Any CPU
Post-build event command: if you have also set the Post-build event command, as shown in the screen shot below, to copy the path in different location, in both the cases (i.e. when you compile and View in Browser), it will be copied to the Path specified in Post-build event command
EDIT:
As mentioned here, use the <probing> Element:
You can use the element in the application configuration file to specify subdirectories the runtime should search when locating an assembly. The following example shows how to specify directories the runtime should search.
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin;bin2\subbin;bin3"/>
</assemblyBinding>
</runtime>
</configuration>
The privatePath attribute contains the directories that the runtime should search for assemblies. If the application is located at C:\Program Files\MyApp, the runtime will look for assemblies that do not specify a code base in C:\Program Files\MyApp\Bin, C:\Program Files\MyApp\Bin2\Subbin, and C:\Program Files\MyApp\Bin3. The directories specified in privatePath must be subdirectories of the application base directory
So in your case, modify the web.config as shown below
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin;bin\x86\debug"/>
</assemblyBinding>
</runtime>
</configuration>
You might try to overcome this issue by changing different configurations in Tools -> Options-> Debugging -> Symbols

HTTP error 500.19 - Cannot read configuration file

In one of my ASP.NET apps, all of a sudden I am unable to run it in Visual Studio 2013 due to the error displayed below. It appears that it is trying to open the web.config from a path that doesn't even exist. All of my project code, including web.config, are located under C:\Projects\SourceCode\AFEManager\Trunk\AFEManager.Web. I've found a number of posts here from users experiencing a similar error, but the solutions seem to vary and none I've found so far seem applicable to my situation. I looked in that TraceLogFiles directory and the most recent log file there is five days old so it obviously hasn't been logging anything since I've been having this issue. Any suggestions are appreciated.
In my case I deleted all folders in D:\My Documents\My Web Sites\ before
Then I caught the error
There is a file .vs\config\applicationhost.config in my solution folder
It contains reference to the deleted folder. So, I deleted applicationhost.config and then pressed 'Create Virtual Directory' button in my project property Web page. It was recreated the file and the folder
I've been able to resolve this issue even though I can't say I fully understand all of the details. I'll attempt to describe the situation the best I understand it and hopefully others with greater insight can add further clarification.
After having been doing all of my development on my workstation, it was suggested that I begin doing this work in a new VM environment that had been set up for me. So I installed VS 2013 there and copied my source code from various projects over there. However, rather than follow my previous local path convention of C:\Projects\SourceCode[ProjectName]... this time I decided to use the directories that are set up during the VS install, c:\users[MyUser]\My Documents\Visual Studio 2013\Projects[ProjectName]. Sometime shortly thereafter, our infrastructure team made a change so that my home directory, c:\users\rmayer, was now being pointed to a common network drive, \totalsafety\TSUsers\rmayer. Everything continued to work without any issues.
However, due to various difficulties I had working in this VM environment, I decided to return to doing my development work on my workstation using the original local paths for my source code. This is when I began encountering the errors described above whenever I would try to run my code through VS. What I've begun to learn is that there is an applicationhost.config file that IIS Express uses located here: \totalsafety\TSUsers\rmayer\My Documents\IISExpress\config. It contains entries for each of my web projects; the one relevant to this issue had a section which looked like this:
<site name="AFEManager.Web-Site" id="8">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\Users\rmayer\Documents\My Web Sites\AFEManager.Web-Site" />
</application>
<application path="/AFEManager" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\Projects\SourceCode\AFEManager\Trunk\AFEManager.Web" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:19257:localhost" />
</bindings>
</site>
The physical path attribute listed under applicationPool="Clr4IntegratedAppPool" at that time was set based on the local path I had been using at the time I was working in the VM environment. Now that this one file is being shared regardless of whether I'm working locally or within the VM due to the move of the users' home directories, this path is invalid when I'm working from my workstation. By updating this path to C:\Projects\SourceCode\AFEManager\Trunk\AFEManager.Web, it now works correctly from my workstation.
Again, I have a limited understanding of how this is supposed to work, but what it's telling me is that I will be unable to do development work from multiple environments (not that I want to any longer) unless the local paths are consistent between all of them. If I'm correct about this, this seems like a less than ideal design.
I had this issue when I moved the project folder to the new machine. The problem is that the VS has the site registered in its config file (applicationhost.config) inside .vs/ folder but did not create folder inside %USERPROFILE%\My Documents\My Web Sites\. If you just click Create Virtual Directory inside the project properties (Web tab) it will not be enough.
First close your VS and remove .vs/ folder inside your solution directory
Reopen VS and click Create Virtual Directory inside the project properties (Web tab) - VS will register the site again and create corresponding folder inside %USERPROFILE%\My Documents\My Web Sites\
I changed the virtual directory path in vs\config\applicationhost.config inside the solution folder.
In my case, the project was located on network not my local disk. After copying the project to local, the issue was resolved. Hope it can save someones time who has the same issue.
You can change the path for the web.config to its real path in applicationhost.config file. This file is located in /.vs/config folder.
After changing the path in this file, save it and restart the project, it solved my issue.
This is happening because I have different work stations, but the project is saving in different folders.
Delete .VS folders that Visual studio created.
It might be hidden in your project structure.
Unhide the folders and look for .vs folder and delete that folder and rebuild the application.
Most simplest way to solve this issue.
Approximate reason to arise this error is copy project from another pc.
Solution:
Step 01: From Visual Studio Solution Explorer, Right click on your project and choose Open Folder in File Explorer.
Step 02: Open .vs folder (Hidden Folder) and
you will get 2 folder named config and another one is named as
your_project_name/config.
Step 03: Both config folder will contain a
file named applicationhost.
Step 04: Open both applicationhost file using notepad and find the directory showing in error screen (Config
File \?\C:\User\hp\Documents\My Web
Sites\YourProjectName\web.config)
Step 05: Just replace this
directory according to your pc directory. Example, in my pc I have
changed as below:
C:\Users\Sydur Rahman\Documents\My Web Sites\MyProjectName-Site
to
C:\Users\hp\Documents\My Web Sites\MyProjectName-Site
Note: Please make sure you have changed in both applicationhost file.
That's all. Now your project will run as expected!
Thank you PongGod!! I am not able to comment on your answer but I wanted to post anyway since I had the exact same issue while running an instance of Orchard. In my case, everything had been running great until I found a bunch of old project files located in:
%USERPROFILE%\My Documents\My Web Sites\
And started deleting them for no apparent reason. I then tried to start up Orchard from Visual Studio in debug mode and received the error message above. After applying the same fix to my applicationhost.config file, everything is working fine now.
In my case, I am assuming that the directories got mixed up because I had initially ran the default Orchard files from Visual Studio and from Web Matrix. Then later on, I downloaded the full source files and began running the files from a completely different directory. Thanks again.
Here is a solution i have found.
https://gyorgybalassy.wordpress.com/2015/03/06/i-asked-for-a-vs-folder-and-the-vs-team-gave-it-to-me/
(1)Find the applicationhost.config file in |YourSolution|\.vs\config
(2)Modify the VirtualDirectory PhysicalPath To your project.
(3)Restart solution. Start project.
(4)If it's still not working, try to check setting in your IISExpress config. If there is not site setting, copy And paste the setting to |UserOnYourComputer|\Documents\IISExpress\config\applicationhost.config
(5)Change the id to other id which not be used in IISExpress applicationhost.config.
(6)Start your project.
I experienced the same issue and I resolve it quite simply. My issue was arose after when I perform a merge operation in git repository, after merge operation Visual Studio some how changed my default project URL to the default URL of my partner's computer from where he pushed the last time in to my repository.
So here is how I resolved this error:
Simply go to the properties of the project.
From the left vertically aligned menu, select Web.
After you will Project url and a text box containing the default port number, now just aside that textbox there is a button "Create Virtual Directory".
Press that button and there you go.
It will again point the default url the current working folder of your project.
Hope it works for you all :)
After all this answers I find my solution. Delete te WebSite in the IIS and recriate. Why? Because I had create de website before installed the framework 4.5 and URL Rewrite.
Go to the project dir:
..\\{ProjectDir}\\.vs\\{ProjectName}\\config
Then delete the applicationhost.config file and recompile your solution.
That's all.
This steps helped me to get over this error
1.In Windows Explorer, locate the web.config file that is associated with the Web site.
2.Right-click the web.config file
3.Click Properties.
4.Click the Security tab, and then click Edit.
5.Click Add.
6.In the Enter the object names to select box, type computername\IIS_IUSRS, click Check Names, and then click OK.
Note* Computername is a placeholder for the computer name.
7.Click to select the Read check box, and then click OK.
8.In the Web.config Properties dialog box, click OK.

app_code files not found by the project

my name is samy and im going insane!
i got this problem that my class's in app_code are no visible afther im uploading them to the server.
localy every thing work fine.
i read some other qustions on this when a lot of answer were like this:
"Right-click on the item in the solution explorer, and select Properties. In the properties window, there is a Build Action option."
*when i right click i cant see any proprty button so i used F4 but then i cant see any build option only "Custom Tool", "File Name" , "Full Path".
and
"you need to publish your website first."
*this didnt work either.
or
"your class are not compiled.
*i tried to build solution and that didnt work either.
please help me becuse im starting read/see tutorials on how to make a good rope knots (this will probly fails too so dont worry to much lol)
this is the error im getting (its look like this becuse im using iframe)
http://img14.imageshack.us/img14/11/theerrorb.png
this is error i get if i publish the site and upload it to the server all the app_code files are compiled in the bin folder as you said.
http://img193.imageshack.us/img193/4436/errorifipublish.png
Possible Solution 1
I have seen this before when working with ASP.NET Web Sites. If my memory serves me right, you should make sure that the paths to your references are wired up correctly.
i.e. if you added a custom DLL to your project
C:\My References\Some3rdParty.dll
and you moved the DLL to another folder/location. Or you could simply have a reference to a DLL that cannot be found.
If you resolve these reference problems you could find that your App_Code gets compiled all of a sudden.
Possible Solution 2
Right click and go to the properties of each of the .cs files in your App_Code directory in the Visual Studio Solution Explorer and make sure that the Build Action is set to Compile.
Possible Solution 3
If you have your .cs files in sub-folders within the App_Code directory you should add the following to your web.config file:
<configuration>
<system.web>
<compilation>
<codeSubDirectories>
<add directoryName="MySubAppCodeFolderName"/>
</codeSubDirectories>
</compilation>
</system.web>
</configuration>
Possible Solution 4
In Visual Studio, right-click on your Web Site in the Solution Explorer and click Publish Web Site. Make sure that the Target Location is a folder on your machine.
Log-in you your web-server and go to the BIN folder there. In the BIN folder on your web site delete all of the App_Web_.dll and App_Web_.dll.compiled files.
From your machine, copy your web site (including the App_Web_*.dll's in the BIN) to your web server where your web site is located. The only file you should probably not copy across is your Web.config file.

referencing dotnetnuke.dll from another folder on asp.net

I have dotnetnuke portal on server in /root/dnn and I am creating asp.net app in c# VS2008 that I need to upload on /root/app.
when I deploy my app, it needs to reference dotnetnuke.dll assembly from /root/dnn/bin instead of /root/app/bin.
how can I manage that, without putting app files in /root/dnn?
I tried to set auto-refresh path and then after upload deleting the /root/app/bin/dotnetnuke.dll so that the app tries to reference the missing assembly in ../dnn/bin/dotnetnuke.dll but the "application is not pre-compiled" error pops, so I tried to upload it without pre-compiling, but still the reference couldn't be found.
Why not give your app it's own copy? That would solve all problems...
In other words, why the cross-app reference? It goes against all security mechanisms of IIS and ASP.NET
As Purple Ant said above, either
load the DotNetNuke assembly into the GAC (which is troublesome because it precludes you from being able to XCOPY upgrade DNN later)
Put your app into the DNN application folder (sounds like what you did)
Copy the DNN dll into your app folder. (the most common solution)
What you're thinking of is the <probing privatePath="" /> element of the config file. But I don't think it's available to be used in web apps and (according to the documentation) only works for subfolders.
<configuration>
<runtime>
<assemblyBinding>
<probing privatePath="bin;bin2\subbin;bin3"/>
</assemblyBinding>
</runtime>
</configuration>
After all, I had to upload .aspx and .aspx.cs files in portal folder and bin files in dnn's bin folder, add the few lines from my web.config to dnn's web.config, and change queries to database by writing them from code instead using dataset objects, that is .xsd, .xss files. I also had to copy the code from my App_Code into my .cs files before upload because C# and VS cannot be compiled together in dnn's App_Code.
I think your best bet with what you are trying to do is to install the DotNetNuke.dll into the GAC on the server. I don't believe that ASP.NET/IIS will allow access to any assemblies outside of the current websites folder structure.

Categories