问题标签 [dotnet-publish]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
100 浏览

.net - dotnet publish 没有 dotnet build 中存在的一些 Nuget 依赖项

假设我有以下项目结构:

NuGet 包包含库 B 在运行时需要的一些资产。包的 nuspec 文件如下所示:

问题是:assets 不仅会被复制到 ExecutableProject 的输出路径,还会复制到 Project A 和 Project B 的输出路径。这是一个问题,如果有很多 nuget 包,有很多资产文件和项目依赖关系图很深,因为它增加了构建时间。

我通过添加一个 buildTransitive .targets 文件来使其工作,该文件仅在项目是可执行项目时复制内容文件:

我将 .nuspec 文件中的 copyToOuptut 设置为 false 以阻止 msbuild 将内容文件复制到每个库项目输出文件夹中。现在我的问题是,当我使用 dotnet publish 构建和部署应用程序时,nuget 包的依赖项也不会复制到目标文件夹,而这适用于 dotnet build。

我现在已经尝试将“buildtransitive.target”文件中的“AfterTargets”值设置为“Publish”,但它没有帮助。

也许有人和我有同样的问题,可以告诉我为什么 dotnet publish 不起作用但 dotnet build 起作用?

0 投票
0 回答
271 浏览

c# - 在不同环境的 Windows 服务中发布 ASP.Net Core

我已经成功地发布了一个 ASP.Net Core 应用程序并将其作为服务在我的本地机器上运行。我想知道的是如何为我的不同 appsettings.{environment}.json 发布?

我在很大程度上遵循了这些文档以获取指导,其中指出可以通过设置 ASPNETCORE_URLS 环境变量来设置不同的环境,但没有进一步详细说明。我在网上做了一些挖掘,发现这个似乎很有希望的stackoverflow 线程。我尝试使用以下命令在开发环境中发布

但它仍然默认使用 appsettings.Production.json。该命令成功更改了 web.config 文件以包含以下内容

但是上面发布的文档还指出,对于 Web SDK,web.config 对于 Windows 服务应用程序来说是不必要的。如何将不同的环境发布到 Windows 服务?

0 投票
0 回答
43 浏览

c# - 如何管理“应用程序。.config”和“dotnet publish”,然后使用 Azure Pipeline 进行部署

我有一个 ASP.NET Core API DemoApi.csproj,其中包含三个“app*.config”文件:

  • 应用程序配置
  • app.preprod.config
  • 应用程序.prod.config

在 Azure DevOps 中,构建管道生成工件:

这产生:

  • 演示Api.exe
  • DemoApi.exe.config
  • 应用程序配置
  • app.preprod.config
  • 应用程序.prod.config

接下来,使用 Azure Pipeline 任务IIS Web Application Deployment在 IIS 上部署 API 。此任务具有 XML 转换中描述的 xml 配置文件转换机制

该机制检查所有“$1.$env$.config”并将转换应用于“$1.config”。在我的情况下,当我在 prod 上部署时,这需要“app.prod.config”文件并将转换应用于“app.config”。但是API的配置来自“DemoApi.exe.config”,转换“app.config”是没有用的。

这不是什么大问题,我在构建管道中添加了一项将“app.prod.config”重命名为“DemoApi.exe.prod.config”的任务,现在转换应用于预期文件。但这听起来像一个肮脏的黑客。

第一个问题,为什么“dotnet publish”输出“app.config”?该文件无用,“DemoApi.exe.config”包含“app.config”的内容。

第二个问题,可以用“dotnet publish”重命名吗?

0 投票
0 回答
8 浏览

visual-studio - 通过 Visual Studio 2019 从手动发布中获取发布命令

我想从我的工作人员服务/Windows 服务项目中获得 dotnet publish 命令。这些方面的东西:

目前我收到一条错误消息:

找不到。所以我想知道,是否可以从手册/用户界面发布中提取命令?

0 投票
2 回答
203 浏览

asp.net-core - dotnet publish 间歇性失败,因为 DLL 正在使用中,即使在回收应用程序池之后也是如此

我正在开发一个 ASP.NET Core 3.1 Web 应用程序项目,我注意到一键式 Web 部署(我有一个文件夹配置文件设置)不起作用,因为我的网站文件夹中的 DLL 正在被另一个进程使用(可能是 w3wp.exe)。我对 ASP.NET Core 还是很陌生,但这对我来说对于普通的 ASP.NET 来说从来都不是问题。无论如何,我发现回收应用程序池可以暂时修复它,直到 1-2 发布后它再次发生。

我发现一个SO 帖子建议让项目的构建后事件在发布之前自动回收应用程序池,所以我这样实现:

问题是,它并不总是有效。我构建,我"NeatF2P" successfully recycled在输出窗口中看到,然后我仍然得到同样的错误。这是完整的输出日志:

如果我等待一分钟然后再次尝试构建,有时它会工作,有时它不会。手动(在 IIS 中)回收应用程序池有时会起作用,尽管它不应该做任何命令不做的事情,对吧?为什么会这样?

0 投票
2 回答
420 浏览

json.net - 从 dotnet 发布输出文件夹运行应用程序时无法加载文件或程序集 Newtonsoft.Json

我发现Newtonsoft.Json图书馆抛出一个问题

当将应用程序作为 Docker 容器运行时,我想知道为什么会发生这种情况以及为什么依赖项管理无法顺利运行。

我使用 .NET 5

我有一个MyLibrary.A明确Newtonsoft.Json 13.0.1用于序列化和反序列化 json 的库。

我有一个MyLibrary.B包装库的不同MassTransit.AmazonSQS库。这个 MassTransit 库也使用 Newtonsoft.Json,但可能是不同的版本。如果我没有做任何明确的事情,似乎 MassTransit 依赖项显示Newtonsoft.Json 11.0.2. 如果在MyLibrary.B我明确添加Newtonsoft.Json 13.0.1,即使我没有明确使用它,那么 MassTransit 似乎很高兴使用这个最新的Newtonsoft.Json 13.0.1

现在,我有一个MyApp使用MyLibrary.AMyLibrary.B. 它在本地运行良好,但我使用 CI/CD 服务器生成 Docker 映像。

现在我将这个 Docker 映像作为本地容器​​(作为 Docker Compose)启动,我得到了错误

它抱怨甚至不存在的版本。没有 13.0.0.0,这个库好像是从 12.0.3 到 13.0.1。

我现在正在浏览我所有的库,并确保它们都Newtonsoft.Json 13.0.1明确使用。当我检测到其中一些使用依赖于Newtonsoft.Json我的第三方时,我明确添加了相同的版本,这样我就可以在任何地方获得该13.0.1版本。


更新 1:我的解决方法不起作用。我不知道还能尝试什么。

我什至已经Newtonsoft.Json 13.0.1明确地将它添加到我的 web 应用程序中,所以我希望至少在运行时它可以使用。

此外,如果我将我的网络作为标准红隼 AspNetCore 应用程序 (.NET 5) 在本地运行,它会正确启动。到底是怎么回事?为什么我的 docker 容器抱怨Newtonsoft.Json 13.0.0.0找不到?

这些是尝试作为 Docker 容器运行时的痕迹


更新 2:我决定Newtonsoft.Json 11.0.2在我的库中到处匹配 MassTransit 依赖项。 问题依然存在。 现在的错误是

我不明白。我所有的依赖Newtonsoft.Json现在都11.0.2在抱怨。我将在 Web 应用程序主程序集中显式添加此版本(即使我不直接需要它),看看它是否仍然抱怨它。


更新 3Newtonsoft.Json 11.0.2 :在添加到我的所有库并在我的 Web 应用程序程序集中添加相同的依赖项作为依赖项之后仍然存在同样的问题。

根据克里斯的评论,我现在有一个.dockerignore.

我构建映像的方式是,使用 GitLab,使用标准dotnet builddotnet publish然后将发布文件夹的所有内容复制到 Docker 映像中,如下所示

更具体地说,我使用 Kaniko,这是我的.gitlab-ci.yml

我不知道这是否给dotnet publishdocker 带来了麻烦,或者我的流程中是否存在一些缺陷(它适用于所有其他服务)。可能是什么问题?

我可以看到由以及所有其他Newtonsoft.Json.dll文件生成的文件,这些文件应该被正确复制到 Docker 映像中。dotnet publishMassTransit.AmazonSqsTransport

另外,如果我打开,.deps.json我可以看到所有对Newtonsoft.Jsonare 的引用11.0.2,所以不再有版本冲突(我想!)。

我没主意了。


更新 4 我刚刚清除了所有本地 nuget 包(使用 Ubuntu)

有趣的是,当我在项目之后恢复依赖项时

我可以看到/home/diegosasw/.nuget/packages/newtonsoft.json 有版本11.0.29.0.1

所以我猜想某处某个子依赖项正在使用 Newtonsoft 9.0.1,即使Newtonsoft.Json 9.0.1在我的*.deps.json生成中没有 a 的痕迹,dotnet publish我想知道这是否与我的问题有关,也许是因为那是程序集加载并且11被忽略?


更新 5 我刚刚看到Newtonsoft.Json 9.0.1一些测试项目正在使用它,因为我可以在coverlet.collector.deps.json下面coverlet.core 1.0.0Microsoft.Extensions.DependencyModel 2.1.0

我想这不是我问题的原因。

此外,我已验证docker export $(docker ps -lq) -o foo.tar容器具有Newtonsoft.Json.dll.

我想了解为什么会发生这种情况,并了解如何更好地解决此类问题。


更新 6(10 月 4 日)

我认为问题不在于 Docker。我认为问题可能与dotnet publish我遗漏或做错的事情有关。

我把 Docker 留在了外面,因为我没有发现任何问题。我试图简单地做一个

并在该发布文件夹中执行应用程序dotnet MyCompany.ItgService.dll以重现异常。

但是在发布之前,当我使用

我没有得到那个例外。

有关完整详细信息、跟踪、树结构等,请参阅https://github.com/dotnet/sdk/issues/21716 。

概括

问题是:

  • 为什么dotnet publish似乎没有产生我的应用程序运行所需的一切?

  • 为什么它在运行时抱怨存在的程序集?


最后更新:问题解决了。请参阅我自己的回复,其中有关如何正确解决此类问题以及我如何通过确保我的测试项目(使用不同版本的库)不发布工件并覆盖所需的依赖程序集来解决它的信息。

0 投票
1 回答
147 浏览

.net - IsPublishable 在 .NET 5 单元测试项目中被忽略

我在解决方案中有一些 .NET 项目。当我发布它们时,我只想发布我的src项目的 DLL,而不是测试项目。

https://github.com/dotnet/docs/issues/13365https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-publish#msbuild都可以使用 IsPublishable .

.NET 5 项目似乎忽略了 IsPublishable。

我在任何测试项目中设置以下

但后来,当我做 a 时,dotnet publish -c Release -o publish我仍然可以看到测试项目*.dlldeps.json. 为什么?如何实现我想要的?

0 投票
0 回答
90 浏览

.net-5 - dotnet publish,带有框架引用的核心项目,发布配置失败

在发布配置中发布会出现此错误:

Microsoft.Bcl.Build.targets(97,5):错误 MSB4062:无法从程序集 ...\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl 加载“EnsureBindingRedirects”任务。构建.Tasks.dll。

无法加载文件或程序集“Microsoft.Build.Utilities.v4.0,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”。

该系统找不到指定的文件。确认 <UsingTask>声明正确,程序集及其所有依赖项都可用,并且任务包含实现 Microsoft.Build.Framework.ITask 的公共类

这是我的发布命令:

  • 如果我省略配置参数,则构建成功。
  • 使用 Visual Studio (msbuld) 构建适用于调试或发布配置。

这是一个 .Net 5 项目,它引用了使用 .Net framework 4.7.2 项目的项目。

0 投票
0 回答
46 浏览

asp.net-core-mvc - 从 github 操作发布时,实体框架 SQL 脚本生成失败

我是 github 操作的新手,我正在尝试使用 Web 部署发布配置文件(.pubxml 文件)将 Web 应用程序发布到托管站点(不是 Azure)。

我正在使用此命令发布

操作失败并出现以下错误:

我可以使用本地计算机上的相同命令发布到托管站点,但无法从 github 操作发布

有人可以帮我解决这个错误吗?

0 投票
1 回答
241 浏览

asp.net-core - 在 ASP.NET Core 发布到 Azure 应用服务期间设置 stdoutLogFile 位置是什么?

我正在将 ASP.NET Core Web API 发布到 Azure 应用服务。我已从 Visual Studio 2022 和 Azure DevOps 管道发布。我试图了解为什么 Visual Studio 发布过程会导致与 Azure DevOps 管道不同的 web.config 文件。

我的项目确实包含一个 web.config 文件,其中包含一些请求限制。

当我从 Visual Studio 或 DevOps 发布时,发布过程会添加 aspNetCore 模块和<aspNetCore>元素的处理程序信息。

当我从 Visual Studio 发布时,元素stdoutLogFile上的位置是.<aspNetCore>"\\?\%home%\LogFiles\stdout"

当我从 DevOps 管道构建和发布时,stdoutLogFile位置是.\logs\stdout.

我相信这dotnet publish是转换 web.config 文件添加 aspNetCore 模块信息的管道中的任务。我将以下参数传递给它以生成一个独立的应用程序 --configuration Release --runtime win-x64 --output $(Build.ArtifactStagingDirectory)

web.config文档指出:

将应用部署到 Azure 应用服务时,stdoutLogFile 路径设置为 \?%home%\LogFiles\stdout。

但我找不到任何解释什么是/应该设置该值。什么是设置值?如何在我的 Azure DevOps 管道中或 Visual Studio 之外模仿这种行为?发布配置文件中是否有 DevOps 管道未使用的内容?我的主要目标只是更好地理解这个过程。