gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:26:28 26 4
gpt4 key购买 nike

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

但现在我需要将该进程移至构建服务器。我搞乱了 dotnetpublish 但最终我陷入困境,因为解决方案的其他组件不是干净的 dotnet 核心,因此构建失败。所以我需要坚持使用 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 天了。而且 - 一如既往在 StackOverflow 上 - 在询问后不久,我自己找到了一个可行的答案。

tl;博士:

项目.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" />
...

MSBuild 命令:

msbuild Project\Project.csproj -t:restore /t:Build;Publish /p:Configuration=Release /p:Platform=x86 /p:PublishProfile=x86Profile /p:OutputPath=bin/Publish/x86 (对于 x64 也是如此)

说明:

我认为是dotnet build/publish要我更改的命令 TargetFrameworksTargetFramework 。但对于 MSBuild 来说这是错误的。和dotnet在这里不起作用,因为解决方案是混合 dotnet 核心和 dotnet 框架。所以必须解决这个问题。

<RuntimeIdentifiers>win-x86;win-x64</RuntimeIdentifiers>是命令所需要的。我将其添加到 *.csproj 中,因为我知道我仅针对 Windows 构建(目前)并且我需要两个版本。

我真的不知道为什么我需要这条线 <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v15.0\WebApplications\Microsoft.WebApplication.targets" />但如果没有此发布,并且使用 PublishProfiles 就无法按预期工作。

帮助我到达这里的链接:(未排序)

https://github.com/Microsoft/msbuild/issues/1901

https://github.com/aspnet/vsweb-publish/issues/22

How to Publish Web with msbuild?

ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json

Configure MSBuild output path

关于.net-core - MSBuild 发布 dotnet 核心应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55099253/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com