I have a web application project that I publish via Visual Studio 2010 to my server. My problem is that it can take very long time before it can actually publish it. Maybe 10 minutes! It doesnt happen everytime but very often.
Here's a summary of what i have in the Output -> Build console when I try to publish:
- The project is compiling - OK
- Connecting to C:\Users{user}\Desktop\MyProjectTest... (this is where it can take up to 10 minutes)
- The files are publishing...
Process Explorer
When I open ProcessExplorer, I see that devenv.exe
is taking all the CPU. When I open this process, I see that the task that consume all the CPU is clr.dll!StrongNameSignatureVerification+0x11ee1
. As soon as this task finish, after 10 minutes, the publishing task finish quickly.
Process Monitor
With Process Monitor, I have monitored the TID of clr.dll!StrongNAmeSignatureVerification and I've got MANY redondant events. For over 5 minutes, the task try to access a file that I don't have on my computer. He is searching for Microsoft.Build.Task.resources.dll
. It's like if the publishing task was trying again and again and again something that doesnt exist. For your information, I'm using Windows 7 French with Visual Studio 2010 English. On the screenshot, you see like 10 events of over 2000 events of the same thing!
More info on my setup
Here is some info that can help to identify the problem:
- My application is build with MVC3
- I have a few third party dlls. Some of them are signed.
- I'm publishing with the File System method.
- I tried to publish on my local computer and the problem is also there so its not a network problem between my computer and my server.
- I have tested on Windows 7 x86 & x64 French edition
- My Visual Studio 2010 SP1 is the English edition
UPDATE 2011-09-23
I now know how to solve the problem BUT I don't know what is causing it. If I delete the **.suo file (at the same level as the .sln file) and i reopen Visual Studio, the publishing will be really fast. So reinitializing the .suo file seems to solve the problem each time the publishing get slow.
Just to make another test, I've made a backup of the .suo file when the publishing was slow and deleted it. Now the publishing is fast. If I copy the .suo file back to his position and reopen Visual Studio, the publishing wil开发者_如何转开发l be slow again. So all seems to point to that file.
Any idea on this one?
Try this way
In order to deploy the release on the development or production server, please follow the following steps.
- Install Web Deployment MSI.
- Right Click on the your project under the solution explorer and add the web deployment project( Here I am not using convert to web application or publishing)
- Then compile the files. This will create a folder in your project directory which will contain the required files to be deploy on the server.
- Take the back up of your virtual directory and remove the virtual directory as well as files from inetpub.
- Goto Inet mgr , type inetmgr in run hit enter.
- Under the default website, create a virtual directory, keep the deployed files in the inetpub and browser the files.
- Allow appropriate access such as read, run script and browse. That's all
Flag it as your answer if you have find it useful else let me know ...
I am not sure if it's a suo file that is causing, but for me, this solved the problem.
After compiling, the publish will call aspnet_compiler, which actually takes longer as it is generating custom dll for all code.
But check with your VSPackages, is there any package written for some interpretation or so, that might be interrupting your publish.
I just experienced the same problem publishing to a network share and discovered that copying the files in Windows Explorer was also extremely slow. When I zipped the build folder and copied it across it took a few seconds. I conclude that the VPN OR Antivirus OR Firewall at one end or the other are adding some overhead to every file transfer.
Windows is far faster transferring 1 giant file than transferring thousands of tiny files, even it the net size is the same. So try this:
- Publish to a local file (not directly to the IIS file share).
- Zip the local files (these files will compress well).
- Use file explorer, delete the IIS file share files.
- Copy/paste the local zipped file to the network share.
- Unzip the files on the server using file explorer. (you will not have to remote into the server to do this)
This accomplishes a couple things. 1) Its 1 giant file, not thousands of tiny files. 2) The compressed file will be compressed 50% to 80% so the data transfer over the wire will be that much smaller.
If you need a backup, its the same process in reverse but without publishing. I typically use L7.zip, but the built in windows zip will work. I don't know why Visual Studio cannot do this programmatically.
精彩评论