Nad*_*ard 202 c# publish azure .net-6.0
当我发布 ABP 项目时,出现以下错误:
C:\Program Files\dotnet\sdk\6.0.100-rc.1.21458.32\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.ConflictResolution.targets(112,5): error NETSDK1152: Found multiple publish output files with the same relative path:
D:\Github\volo\abp\lepton-theme\src\Volo.Abp.AspNetCore.Mvc.UI.Theme.Lepton\compilerconfig.json,
D:\Github\volo\abp\bookstore\src\Acme.BookStore.Theme\compilerconfig.json,
D:\Github\volo\abp\lepton-theme\src\Volo.Abp.AspNetCore.Mvc.UI.Theme.Lepton\package.json,
D:\Github\volo\abp\bookstore\src\Acme.BookStore.Web\package.json.
D:\Github\volo\abp\bookstore\src\Acme.BookStore.Web\Acme.BookStore.Web.csproj
Run Code Online (Sandbox Code Playgroud)
Nad*_*ard 383
问题:
.NET 6 迁移后会出现此问题。有一项新功能可以阻止将多个文件复制到具有相同文件名的同一目标目录。请参阅https://learn.microsoft.com/en-us/dotnet/core/compatibility/sdk/6.0/duplicate-files-in-output
解决方案#1(解决方法):
您可以将以下构建属性添加到所有可发布 (*.Web) 项目的 *.csproj 文件中。此属性将绕过此检查并像以前在 .NET5 中一样工作。
<PropertyGroup>
<ErrorOnDuplicatePublishOutputFiles>false</ErrorOnDuplicatePublishOutputFiles>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
解决方案#2:
排除要复制到输出文件夹的有问题的文件。在此示例中,我们将排除这些文件:compilerconfig.json
和package.json
.
将以下行添加到您的common.props
(位于解决方案的根目录中):
<Content Remove="compilerconfig.json;package.json"/>
<None Include="compilerconfig.json;package.json">
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
Run Code Online (Sandbox Code Playgroud)
che*_*rry 36
上述答案引导我找到了我的解决方案。我的案例是一个自建实体框架库项目,现在在构建使用它的网站时正在复制其 appsettings.json 。
我的解决方案是让它复制到输出文件夹(当我在 VS** 中执行迁移操作时),但使用“从不”值阻止它发布,因为它仅作为网站或 Web 服务下的库发布。
<ItemGroup>
<Content Include="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</Content>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
** 我的 EF 库项目根据这篇数据播种文章中的模式自行构建。
这样我就可以吃掉我的蛋糕并保留它。
JCi*_*sar 13
如果您在 azure devops pipleline 中获取此内容,您可以添加以下任务来指定构建的 SDK 版本
- task: UseDotNet@2
displayName: 'Install .Net SDK version'
inputs:
packageType: sdk
version: x.x.xxx //example (3.1.416)
installationPath: $(Agent.ToolsDirectory)/dotnet
Run Code Online (Sandbox Code Playgroud)
我在 Blazor WebAssembly 项目和关联的集成测试项目中遇到了这个问题,appsettings.json
当我dotnet publish
通过 GitHub 操作出去时,这两个项目都有文件。我发现了另外两种对我有用的方法(以及已接受的答案):
<IsPublishable>false</IsPublishable >
到测试项目dotnet publish
指定.csproj
我在使用具有 Razor 类库的 Web 应用程序时遇到了这个问题。罪魁祸首文件是 LIBMAN.JSON。
右键单击该文件并将文件属性更改为:
构建操作:无
复制到输出目录:请勿复制
仅用于工具的其他文件可能会以相同的方式进行更改。
我还用于compilerconfig.json
将 scss 编译为 css。通过 UI 最简单的修复方法是:
Open Solution Explorer->compilerconfig.json->right click->properties
并设置:
Build Action: None
Copy to Output Directory: Do not copy
Run Code Online (Sandbox Code Playgroud)
对所有的compiler.config文件执行此操作(在我的例子中是在客户端项目以及服务器上)
这背后的原因是这个编译器配置仅在构建过程中本地使用,但稍后在应用程序运行时不需要它。
这是由.NET 6 SDK 中的重大更改引起的,并且与您的项目目标的 .NET 版本无关。例如,如果您安装 Visual Studio 2022,它将安装 .NET 6 SDK 并使用它进行构建和部署。
您可以强制 VS 使用较旧的 SDK 工具链,方法是在解决方案根目录中运行生成一个global.json
文件,然后将属性值替换为所需的 SDK 版本(用于列出已安装的版本)。dotnet new globaljson
"version"
dotnet --list-sdks
我想这意味着如果您有一个项目依赖项 A->B,其中 A 和 B 都是可执行的并且有自己的 appsettings.json,那么最好将项目 B 拆分为 B1 作为带有 appsettings.json 和 B2 的 shell 项目作为具有 B 的所有功能的库。那么依赖关系 A->B2 和 B1->B2 将避免“多个发布输出文件”问题。
归档时间: |
|
查看次数: |
126559 次 |
最近记录: |