Saturday, March 1, 2008

DLL Files And .NET ClickOnce Deployment

I want to deploy one of my .NET apps as a ClickOnce application. The issue is that I am connecting to Oracle (see previous posts here and here). Connecting to Oracle requires at least, 4 DLL files that generally have to be in the same directory as the EXE file. The issue is that when the program is published, the DLLs are not referenced in any way, so the program won't work.

Then I read about adding the files to the project, so that ClickOnce and the Publish processor will figure out that the DLLs are required and add them to the manifest.

Here is the process in Visual Studio 2005:
1. Put the 4 DLL files in their own directory in your solution directory (for ease of use mostly).
2. Add all four files to your project by going to "Project->Add Existing Item..."
3. Click on each DLL file in the solution explorer and then change their property: "Copy To Output Directory" to "Copy Always".

That's it! Now when I publish or even run the application I don't have to worry about if the DLL files are where they should be.

3 comments:

Kris Nobels said...

Hey i got the same problem.
I have to include some crystal reports dll's.

Now the dll's are set to copy always. But when i publisch and install there are no crystal reports with the setup from clickonce installed on client.

Did you get it to work ?

Kris

Scott said...

I have not tried doing that with a program that installs on the client, but I assume it should still include the DLLs in the manifest.

For installing, you might need to check out the options in the project properties. There may be another method to use for installed programs.

Kris Nobels said...

I got it to work.

ClickOnce only deploy (take) the dll files that are needed to run the program.

What i did:

- for each file in solution(in my case only the reports) select the properties of each file and set the build action to embedded recource.

- Build in release mode

- Run the click once again.

and it worked. :-)

I missed the reports in the solution and that was the cause of the problem.

Thanks for the information.

regards

Kris Nobels