In the older version of the visual studio, it was possible to build a small "Hello World" application that has a single .exe file and size around 200KB. I started to use a new version of Visual Studio and I have with this simple task.
When I build it with parameters:
<PublishTrimmed>true</PublishTrimmed>
<PublishReadyToRun>true</PublishReadyToRun>
<PublishSingleFile>true</PublishSingleFile>
The output is single .exe, but with the size around 25MB. When I build it as "Framework dependent", the .exe is around 150KB, but it has additional 2 .json configuration files.
Is it possible now to publish a single small .exe file without the .json configuration files in Visual Studio?
You can try to use Costura.Fody to make a single exe without another file.
The following link is a similar question, you can refer to it to solve this problem.
How to make a Single exe file from c# assembly and dll?
Related
I am hoping to get some help to figure out how to create an installer in visual studio 2013.
My class library project generates a DLL called DataTest. The solution also has an xml file called config.xml. Currently when I build the solution the DataTest DLL ends up in the bin folder (and the config.xml is just a static file somewhere). What I want the installer to do is copy/install the DataTest DLL to C:\MyData\Test and the xml file should end up in C:\MyData\Config.
I have found this http://geekswithblogs.net/TarunArora/archive/2014/04/24/visual-studio-2013-installer-projects-ndash-hello-world-installer.aspx which seems like a good place to start but I don't have much experience with the different configurations in VS so I don't really know how to do what I want to do.
Thanks
I'm assuming you want an MSI file to do the install because you posted that link, so you're using the Visual Studio Installer projects extension.
This might also help, old but still applies:
https://www.simple-talk.com/dotnet/visual-studio/getting-started-with-setup-projects/
Configurations in Visual Studio don't really have much to do with this. The Bin, Release, Debug folders in your build are nothing to do with where you want to deploy the file on the target system. For example, if you have a Dll that you want to install in the Common Files Folder then you select that folder in the File System view of the setup project and just drag and drop the file in there. The same principle applies to the Program Files folder, which is the usual place for applications.
Met a problem. VS2013 doesnt allow to merge files into same exe which created after build.
"$(SolutionDir)ILMerge\ILMerge.exe" "$(TargetPath)" "$(SolutionDir)..\Lib\Soft.dll" /out:"$(TargetPath)"
My idea was to merge built exe with 1 dll (uses in references) and to have the same exe filename.
I can do this without any problem apart of VisualStudio.
But i prefer to do merge exactly in post-build event, and do not change the exe filename.
Is there some workaround ?
PS. I dont want to have a dll in resources, because its used a lot, and its easy to have as usual in references
I've created a Windows Forms Application in Visual Studio 2008, .NET 3.5.
Now I want to finalize my project, i.e. to create a single .exe file which I can give to someone and he will be able to run it on his computer.
In my project files I found bin/Debug directory where I see a .exe file.
Can I just use this file as is, or I am missing some important finalizing procedure ?
Thanks !
You can just take the EXE as long as it has no dependencies. If there are any dll files in there, you need to include them (or use the ILMerge command line utility to combine them). You can, however, ignore any generated pdb or xml files.
As a side note, you should be compiling in release if you plan on deploying your project (the output will be in bin/Release)
You are not clear in you question. If your solutions output is just a single exe file, then Yes, you can give away the exe file in bin\debug.
But instead of bin\debug\ exe you must distribute the bin\Release\ exe which is meant for release purpose.
To make the ILMerge easier, use the GUI tool from codeplex at http://ilmergegui.codeplex.com/
If this is a commercial application, several commercial obfuscators allow creating a single exe.
In SetiSeeker response the link http://ilmergegui.codeplex.com/ is not reachable
I have a relatively complex console application which relies on several dlls. I would like to "ship" this in the best form. My preferred way would be an exe file with all dependencies embedded in it (not that big, about 800K). Another thing would be to just zip the contents of the "Debug" folder and make that available, but I'm not sure if everything will be available like that (will all dependencies be resolved just by zipping the debug folder?)
What reliable practices exist for deploying console apps written in C# using VisualStudio 2008?
If you just copy the Foo.exe, dlls and Foo.exe.config files, it's likely to be okay. Have a look at what else is in the debug folder though - you (probably) don't want to ship the .pdb files, or Foo.vshost.exe. Is there anything else? If you've got any items marked as Content which are copied to the output folder, you'll need those too.
You could use ilmerge to put all the dependencies into one exe file, but I'm somewhat leery of that approach - I'd stick with exe + dependency dlls.
You should look into setup projects in Visual Studio. They let you set up dependencies and include the DLLs you need. The end result is a setup.exe and an MSI installer.
Here's a walkthrough that should help.
OR you could use a self-extracting ZIP file. Package all the normal files up - .exe, .dll, .config, and anything else - into a zip file. Extract into a temp directory and set the run-on-extract program to be the actual console exe.
Create a setup project in VS08 and add the primary output of the console app project to it, this resolves the dependencies and packages them in a .msi
You can use wix installers to bundle it. For console application, exe + dependicies DLLs + nuget DLLs , zipping them is enough.
I need to generate a list of all the files which are enough to run my application on any machine. I need this for a setup program. When i go to bin/release folder i'm able to see some pdb files and some configuration files, which i think will not be needed. I tried to disable generation of pdb files too but it still generates pdb for the other projects present in the solution.
So i need a way in visual studio 2008, which can get me all the files (the .exe and .dll and other files) required by my application to run.
Thanks.
Have you tried publishing the application (Build > Publish [app])?
This should just copy all the essential files to the specified folder.
The pdb files are used for debugging. Building in "Release" mode should exclude these files.
You can also create a setup project within the solution. Using that project it is possible to see a list of included files.
If you make a release build or publish the application then you should have a complete set of assemblies your application needs.
However, it can still rely on assemblies which reside in the GAC (Global Assembly Cache) of your machine. Check the references of your project if you think there are assemblies missing in the bin folder.
To solve this exact problem with our software, we wrote a simple console app that finds all the .vbproj & .csproj files in our projects directory, then changes all of the to Release mode (which does not create pdb files, documentation files etc).
This is then run by the build machine (CruiseControl.Net) before it starts compiling the projects.