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.
Related
I have a ASP.NET web api project, the api has lot of dependencies to other dlls so we have placed all the dlls in a specific folder. If I point output path of the web api to that output directory and execute in IISExpress it gives following error
Parser Error Message: The CodeDom provider type "Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" could not be located.
If we see file location of the error it is still pointing to WebAPI_SourceCode_Directory\web.config and not my output folder. But output folder has web.config file. How can I make the web app to run from output folder using IISExpress
It is not recommended to change the output directory of an asp.net application due to IIS security restrictions.
However you can still hack your way through it by changing config files appropriately, see here
As per MSDN article, when you compile a Web application the compiled code is placed in the Temporary ASP.NET Files folder
To find this Temporary ASP.NET Files folder check my post here
do not use IIS express for development, use a proper IIS instead. This way you will iron out any production issues from the beginning.
Whether your API has a lot of dll dependencies or not, it makes no difference. The API needs to know where to get them from and I wouldn't change the default behavior. They will be in the bin folder like all the other dependencies when you build the project.
To deploy the API even in a local environment, use the Publish method to a local folder, then build an IIS application pointing to that folder.
That's all you need to do, so why complicate things? You can still publish in debug mode, you can still connect your Visual studio to it and debug it properly. There is literally zero need to fight the default way of doing things.
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
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" />
as project is in developing state uploaded Files on webserver has not been compiled for easy editing and other reason , when i edit model and add property to view , iis say that your model has no that because of old compilation files , solution that Tested :
Deleted Temp folder in windows\microsoft.net
<compilation batch="false" debug="true" targetFramework="4.5" />
add new line to webconfig to force new compile
yet it run old compiled files
Based on the comments, I will add an answer...
You need to actually publish the application: How to publish a web app. You can publish this locally on your desktop and copy the files onto the server, or you can publish direct to your server.
When you publish the application, the model(s) get compiled into an assembly in your bin folder, so you cant directly modify these files on the fly.
You can chose a setting to allow for views to be updated, but this is very limited.
So, best approach is to set up a publish profile for your DEV server, and make your change, and then re-publish. It will take you less than a minute to get the latest code on the server.
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.