How to Publish dotnet webapi application that have mutiple projects to iis - asp.net

[![this is my webApi project solution structure.this have multiple projects added][1]][1]
how can i publish these kind of projects in visual studio 2019
[1]: https://i.stack.imgur.com/Z42EP.png

I'm assuming by publish you do not mean you just want the DLL's.
Those are class library projects, they cannot be published by themselves.
If you want to publish a project you need to build either a web api, console application, wpf, web forms, etc. You can then add the class library projects as project references to the project you wish to publish. When you publish one of those projects, the dlls for the class library projects automatically get built along with them.
In the example in the screenshot you provided, you would publish "ThriftPlanningWebApi". That would automatically publish all the dlls for the class libraries along with it.
If you do want the raw DLL's simply build the project in release mode, navigate to the file location of the project. In the bin folder there should be a folder called "release". That folder will contain all your dlls.
Let me know if you need anything else.
Happy coding :)

Related

MSBuild how to create a web deploy package for .NET Core apps without producing zip file

So what I'm trying to do is build a .NET Core app with MSBuild, and have it create the web deploy folder but without automatically putting it in a zip file. I can do this for .NET Framework apps by using /p:WebPublishMethod=Package and /p:PackageAsSingleFile=false, it creates the same folder structure but without adding it to a zip file. However with a .NET Core app, it seems to ignore this flag and always zips up the final package.
The reason I do not want it zipped up is I need to add a number of "custom" files to the build before I can deploy it. I can't add the files during the build itself because we have a number of different clients, and they all share the same "base" software, and then the client specific files need to be added afterwords. So I want to build the "base" software, then be able to copy the output folder, add the client specific files, and then zip up that build to be deployed to IIS. This saves a tremendous amount of time because the alternative is doing a new build for each client, even though 95% of the software is the same.
So is there a different way to accomplish this with .NET Core apps?
I've been testing with MSBuild via command line. The solution has a mix of .NET Framework and .NET Core asp.net websites. This is what i'm running:
msbuild.exe "Solution.sln" /nologo /nr:false /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=false /p:SkipInvalidConfigurations=true /p:PreBuildEvent="" /p:PostBuildEvent="" /p:BasePackageLocation="C:\Temp\BuildOutput" /p:platform="any cpu" /p:configuration="release"
This works for the .NET Framework websites, but the .NET Core websites continue to be zipped up
And just a note that the BasePackageLocation is a custom property that sets the PackageLocation to "$(BasePackageLocation)\$(MSBuildProjectName)\" so that each website is put in its own sub-directory
So is there a different way to accomplish this with .NET Core apps?
Sorry but the answer could be negative. This is one issue about publishing .net core projects, it has been reported to Product Team, there might be a long way to go before the fix.
For web deploy package mode in .net core, you'll get WebApplication.deploy.cmd in the same folder where the .zip exists, many commands in the xx.cmd are associated with the xx.zip, so it's not recommended to manually do something to unzip it.
I suggest we can track the issue there(DC) and I will update the answer if there's any update or fix :)

How can I publish .net core solution

I have a .Net Core web application that has two .Net Core class project dependencies in the same solution.
The scaffold structure of the project solution is as follows.
MyProject.sln
MyProject.Data
MyProject.Entity
MyProject.WebUI
I want to publish this solution in my web hosting but the publish option only appears on the WebUI does not appear on the solution.
How can I solve this ?
If the UI project has a dependency (i.e. a reference) to the other two projects, then when you build the UI project (which will happen at publish time, if you don't do it separately beforehand), the other two projects will be compiled into DLL files and the resulting DLLs will be added to the build of the UI project automatically. This is how all .NET programs work.
So yes it's logical that you can only publish the UI project - the other two, being simple class libraries, would be no use on their own anyway, so it makes no sense to be able to publish them separately. You can only publish something which can actually be executed.

Unable to load DLLs when starting up IIS Express hosted web project (VS2015)

Backgroud:
I am in the process of migrating a console application to be part of our existing web API project. All development work is done on Visual Studiod 2015 (with IIS Express). The application uses few third party datasource api DLLs to grab data from that datasource. All these DLLs are managed by our internal nuget package sources.
Issue:
Now the console application runs fine and can load up the those DLLs. I copied across the logic into my web project and added the DLLs via nuget. Solution builds but got the following error when starting up the web project:
Could not load file or assembly 'ABC.DLL' or one of its dependencies. The specified module could not be found.
Where ABC.DLL is one of the third party DLLs.
I have done the following:
Confirm ABC.DLL is in the bin folder of my web project
Changed target build platform of my web project to be x86 and unchecked "Use 64 bit version of IIS Express for websites and project" setting in VS2015 (the third party dll is 32-bit)
Ran dumpbin.exe on ABC.DLL's dependency and got XYZ.dll,MSVCR120.dll,KERNEL32.dll,MSVCP120.dll,mscoree.dll
Regarding to the last step, those dlls were all missing in the bin folder (but the last 4 DLLs should be in system32 win directory so shouldn't matter?)
As for XYZ.dll, it is another third party library and is located on C:\Program Files (x86)\XYZ\ folder. I manually copied it across to the web project bin folder (in fact copied across all Dlls inside XYZ folder) and still get the same issue.
Questions
What am I missing here? The console app obviously can load ABC.DLL but the web project can't. Appreciate it if you can tell me what to check next.
The error message from start up web page is not very useful, is there a way to find out where the web project is trying to load the third party DLLs?
Thank you in advance!
Simply adding external DLLs to your Bin folder is not a great idea. Files can disappear from this folder for various reasons, such as your team members deleting a seemingly useless DLL, or through Visual Studio clearing it. Also, the output DLLs from referenced projects in your solution, would end up there, and are replaced every time you build your project.
What you should do for third-party DLLs, is create some "dependencies" folder in, or close to, your project, and stick the DLLs in there. Then you should right-click on the project, select Add Reference, browse to that new "dependencies" folder, and add a reference to the DLL that way. This is similar to the way NuGet works; it keeps DLLs in their respective folders inside the packages folder, and adds references to those DLLs.
I finally found the issue and thanks for all the help, I had to disable shadow copying in VS (mentioned in 64 bit managed assembly with unmanaged dependencies not loading in IIS / ASP.NET MVC 4).

How to deploy ASP.NET MVC application with devexpress components to Azure websites

Is there a way to deploy asp net application with dexexpress components other than using virtual machine with installed libs on it?
I want to deploy it to azure websites but get an error that .dll are missing (dont get that error during debugging on localhost where devexpress installed).
Be sure, that you marked the referenced assemblies that you want to publish on the vm as "copy local = true". You can find that option in the properties of a reference.
The output folder of your web app will be automatically copied over to azure websites. For more information how web pages are packaged have a look How to: Create a Web Deployment Package in Visual Studio
You can try one of these options:
Find a NuGet package which includes the dll's you need. I don't know which components you use but NuGet contains a lot of packages -> https://www.nuget.org/packages?q=devexpress
Include the dll's you need in a 3thPartyLib in your project and then reference these assemblies (with copy local = true) from your project.
Be sure to include the license file in your deployment.

ASP.Net Machine.Config Transformations

I am creating a strongly signed class library that contains an ASP.Net HttpModule and HttpHandler.
I have created a visual studio setup project for my library that installs the library in the GAC, however i want to add an assembly reference and the HttpModule and HttpHandler to the machine.config of the destination machine of my Visual Studio Setup Project.
Before i go reinventing the wheel, is there an easy way to do this using the Visual Studio Setup project?
My final solution was to:
Create a commandline application that did everything i wanted it to do
added my commandline app to the payload of my setup project
ran the commandline app through custom actions in my setup project on "install" and "uninstall"
Someone may still be able to enlighten us on how this can be done using built in functionality.

Resources