Jenkins Dotnet Project Publishing Issue - asp.net

I am trying to publish my dotnet project-api from jenkins via powershell. The problem is when I publish it from powershell it's missing around 30 files and I can't reach api. However when I publish it from visual studio manually (or from visual studio package manager console with commands) it works perfectly. What might be causing this issue?
Here are the commands that I am running to publish api ;
dotnet restore
dotnet build --configuration release
dotnet publish -c release --output "path to the publish file"
I have also tried with this to publish command yet it didn'T work;
dotnet publish dotnet publish -c Release --self-contained -r win10-x64
I have been trying to figure this issue for a long time but I couldn't find a way. I would highly appreciate any help. Thanks!!

You should try following 2 Execute Windows batch command
Command
"C:\Program Files\dotnet\dotnet.exe" restore yourProjectSLN file
[E.g:yourProjectSLN = git/FolderName/ProjectName.sln , it should be same as jenkins configuration]
Command
dotnet publish yourProject_csproj_file_location -c:Release
[E.g:yourProject_csproj_file_location = git\FolderName\ProjectName.csproj]

Related

dotnet publish does not pull NuGet packages

I am trying to automate deployment of an ASP.NET WebAPI on a Linux server using the following command:
dotnet publish --configuration Release
However, when adding a new NuGet package to the solution, and then trying to run the dotnet publish command, I get an error because the compiler does not know the new package. Is there a way to tell the dotnet command to pull all NuGet packages ? (I'm kind of looking for an equivalent for pip install -r requirements.txt in python).
For information, I add the NuGet packages via VisualStudio without compiling the solution.
Edit : it seems like, unless I build the solution in VisualStudio, just adding a NuGet packet will only add the packet name and version in the file projectname.csproj.nuget.dgspec.json, but will not add the PackageReference projectname.csproj file, hince the not pulling new packets issue.
I assume you are using some CI/CD pipeline which could publish your web application somewhere.
Feels like you are missing steps before publish:
# Restore (restores nuget packages)
run: dotnet restore
# Build
run: dotnet build --configuration Release --no-restore
# Test (if you have tests in project)
run: dotnet test --no-restore --verbosity normal
# Publish
run: dotnet publish --no-restore --no-build --framework netcoreapp3.1
May be this link may be helpful: github .net CI/CD

Can I publish asp.net core with sdk and runtime files?

I am working to publish my project to vps server Linux
Can i publish project from visual studio with sdk and runtime files
without install sdks and runtime to my server ?
when you publish you can chose to include all the packages needed by the project by making it "self contained" here is the command line to build it:
dotnet publish -o c:\temp\yourproject --self-contained -r linux-x64

Publish project from cli

I'm wondering what is the difference between publishing project from cli and from Visual Studio.
I just experienced sometimes publishing from cli is not getting latest changes. I mean when we have a change or new method, after publishing the project it is not visible. But if I publish from VisualStudio everything is ok.
I'm using this command for cli. I have different apis to publish individuality.
dotnet publish -c Release -o "D:\Deploy\Test\test.api\" "D:\Development\Test\test.api\test.api.csproj"
Plus before that I clean and rebuild the project again from cli.
dotnet clean 'D:\Development\Test\test.api\test.api.sln' --force
dotnet build 'D:\Development\Test\test.api\test.api.sln' --force
Make sure to use the same configuration (-c Release) for all the dotnet commands you run.
However, dotnet publish command should normally be enough to get the latest changes.
Is there any chance you're running the commands without actually saving the files after editing them (VS probably does that automatically when publishing)? Have you tried editing the files with other text editors/IDEs?

dotnet publish command not working with asp dotnet project in aws buildspecs.yml file

I have created sample dot net application, folder structure as follows.
When i am using this command
dotnet publish -c release -o ./build_output demorepo2.csproj build output is getting created inside build_output folder correctly.
Now i have another asp.net mvc web application.
Now i am using same command dotnet publish -c release -o ./build_output test1.csproj but this not working. Getting the following error.
Any idea why this error?
From ASP.NET Web Deployment using Visual Studio: Command Line Deployment
Try to run this command:
msbuild demorepo2.csproj /p:DeployOnBuild=true /p:PublishProfile=MyPublishProfile

Publishing a dotnet application that's already running

I'm attempting to create a script to simplify the process of publishing a .NET Core website. I'm running into an issue when I run dotnet publish against an already running server. The server is IIS with the dotnet bundle installed, so IIS uses its app pool to start dotnet.
Here's my batch file. I'm happy to use another script type:
cd src/app
dotnet build --no-incremental
dotnet publish --framework netcoreapp1.0 --configuration Release --output ../../dist
When I run the script I get this error:
"The process cannot access the file 'C:\inetpub\wwwroot\app\dist\app.dll' because it is being used by another process."
This makes sense, it appears I need to stop, deploy, and restart dotnet. Can I do this from the script? Or is my approach to this problem wrong?
The best way is to drop an app_offline.htm file to your application folder. This will make IIS stop your application and serve the contents of the app_offline.htm file to the user while you are copying the new version. Once you complete copying the new version of your application remove the app_offline.htm file and IIS will start your application.
You can find more details on running ASP.NET Core applications with IIS in my post.
Based on Pawel's answer, I have a deploy folder containing my app_offline.html file and multiple deploy scripts to IIS. Here's a sample script I use to deploy:
copy .\app_offline.htm C:\hosting\my-project\app_offline.htm
dotnet publish ../MyProject.csproj -r win-x64 -f netcoreapp2.1 --self-contained -c Release -o C:\hosting\my-project
del C:\hosting\my-project\app_offline.htm
I think this is a valid solution, but doesn't help when I want to script the build process.
Stop-Website "xxx"
Stop-WebAppPool "xxx"
Start-Sleep -Seconds 5
dotnet publish --output d:\publocation
Stop-WebAppPool "xxx"
Start-Website "xxx"
if you've created a published profile in Visual Studio and you're using IIS, then you can use that profile instead of writing directly to the destination directory:
dotnet publish /p:PublishProfile=Properties\PublishProfiles\IISProfile.pubxml

Resources