.net core MSBuild发布dotnet核心应用程序

.net core MSBuild发布dotnet核心应用程序,.net-core,msbuild,.net Core,Msbuild,我的设置是:我有一个解决方案,其中包含不同的dotnet4.6应用程序(服务)。现在,我们在这个解决方案中添加了一个dotnet核心项目。我可以构建和调试它,但这不会创建可执行文件。在Visual Studio中,我可以右键单击->发布。。。信息技术我创建了两个概要文件(x86和x64),它们应该在/bin/Publish/x86或/x64中创建漂亮的二进制文件。在VS中,这是有效的。该应用程序是独立的,可以在不同的未准备好的机器上运行 但是现在我需要把这个过程转移到buildserver。我搞

我的设置是:我有一个解决方案,其中包含不同的dotnet4.6应用程序(服务)。现在,我们在这个解决方案中添加了一个dotnet核心项目。我可以构建和调试它,但这不会创建可执行文件。在Visual Studio中,我可以右键单击->发布。。。信息技术我创建了两个概要文件(x86和x64),它们应该在/bin/Publish/x86或/x64中创建漂亮的二进制文件。在VS中,这是有效的。该应用程序是独立的,可以在不同的未准备好的机器上运行

但是现在我需要把这个过程转移到buildserver。我搞砸了
dotnetpublish
,但最终我被卡住了,因为解决方案的其他组件不是干净的dotnetcore,因此构建失败。 所以我需要坚持使用MSBuild

目前的尝试是:
“C:\Program Files(x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe”NewProject\NewProject.csproj/p:DeployOnBuild=true/p:UsePublishProfile=true/p:PublishProfile=x64Profile

这说明它成功地完成了构建,但我没有看到任何结果。而且,如果我删除所有属性,只调用msbuild和*.csproj,也没有任何区别。它只是在bin/Debug中以dll而不是exe的形式构建新项目

我还搞砸了
p:PublishProfile=“NewProject\Properties\PublishProfiles\x64Profile.pubxml”
/p:PublishUrl=“NewProject\bin\Publish\x64”
,但它没有改变任何东西


我读了几篇关于SO的文章,告诉大家VS不仅使用参数调用msbuild,而且还进行内部API调用。不过,我需要一个解决方案。我需要构建服务器来创建一个可执行文件。有没有办法触发msbuild来创建它?

哦,天哪,我已经搜索了2-3天了。和往常一样,在询问后不久,我自己也找到了一个可行的答案

tl;医生:

Project.csproj:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFrameworks>netcoreapp2.1</TargetFrameworks>
    <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>  
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <RootNamespace>Company.Toolset.Exporter</RootNamespace>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
    <RuntimeIdentifiers>win-x86;win-x64</RuntimeIdentifiers>
  </PropertyGroup>
  
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v15.0\WebApplications\Microsoft.WebApplication.targets" />
...

Exe
netcoreapp2.1
真的
假的
公司。工具集。出口商


我也经历了一场噩梦,从Visual Studio IDE生成的版本与
dotnet publish
命令之间存在不一致,只有使用msbuild.exe才能解决这一问题。而且,使用
/p:PublishProfiles=theXMLthatVSgenerates.xml
从来都不起作用,所以我必须将每个选项都分解到msbuild命令行中

以下是对我有效的方法:

"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\msbuild.exe" C:\Users\xxxx\Source\Repos\netcore-agent1\CoreAgent1\CoreAgent1.csproj /t:Restore;Rebuild;Publish /p:PublishSingleFile=True /p:SelfContained=True /p:PublishProtocol=FileSystem /p:Configuration=Release /p:Platform=x64 /p:TargetFrameworks=netcoreapp3.1 /p:PublishDir=bin\Release\netcoreapp3.1\publish\win-x64 /p:RuntimeIdentifier=win-x64 /p:PublishReadyToRun=False /p:PublishTrimmed=False

这只是我的直觉,但是如果您使用
而不是使用library SDK,这会简化您的csproj吗?此项目文件的第一行与其他注释一样有问题。您也不应该将其修改为使用
Microsoft.WebApplication.targets
,因为这是ASP.NET 4.x项目的典型步骤。这可能是一个误导性的答案,因为ASP.NET和ASP.NET核心项目应该以不同的方式处理,并且没有太多的黑客攻击。