source

게시 오류:상대 경로가 동일한 여러 게시 출력 파일을 찾았습니다.

gigabyte 2023. 3. 5. 09:51
반응형

게시 오류:상대 경로가 동일한 여러 게시 출력 파일을 찾았습니다.

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

문제:

이 문제는 이후에 발생합니다.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>

솔루션 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>

위의 답변이 저의 해결책으로 이어졌습니다.이 케이스는 자체 구축 엔티티 프레임워크 라이브러리 프로젝트입니다.이 라이브러리 프로젝트를 사용한 웹 사이트를 구축할 때 appsettings.json 위에 복사하고 있었습니다.

솔루션에서는 (VS**에서 이행 액션을 수행할 때) 출력 폴더에 복사하도록 하고 웹 사이트 또는 웹 서비스 하에서만 라이브러리로 게시되므로 "Never" 값을 사용하여 게시하지 않도록 했습니다.

<ItemGroup>
<Content Include="appsettings.json">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
    <CopyToPublishDirectory>Never</CopyToPublishDirectory>
</Content>
</ItemGroup>

** EF 라이브러리 프로젝트는 이 데이터 시드 기사의 패턴에 따라 자체적으로 구축됩니다.

그래서 나는 내 케이크를 먹고 그것을 보관한다.

이를 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

https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/tool/dotnet-core-tool-installer?view=azure-devops

.둘 다 Blazor Web Assembly를 가지고 있었습니다.appsettings.json가 ★★★★★★★★★★★★★★★★★★★★★★★★★.dotnet publish깃허브나에게 도움이 되는 두 가지 방법을 추가로 찾았습니다(허용된 답변과 함께).

  1. <IsPublishable>false</IsPublishable >
  2. 서서 dotnet publish 「」를 지정합니다..csproj 인수 경유

저는 레이저 클래스 라이브러리가 있는 웹 어플리케이션에서 이 문제에 부딪혔습니다.범인 파일은 LIBMAN입니다.JSON.

파일을 마우스 오른쪽 버튼으로 클릭하고 파일의 속성을 다음과 같이 변경합니다.

빌드 액션: 없음

출력 디렉토리에 복사: 복사하지 마십시오.

툴링에만 사용되는 다른 파일도 같은 방식으로 변경될 수 있습니다.

이 문제는 변경이 중단되었기 때문에 발생합니다.NET 6 SDK 와는 독립되어 있습니다.프로젝트의 타겟이 되는 NET 버전.예를 들어, Visual Studio 2022 를 인스톨 하면,가 인스톨 됩니다.NET 6 SDK를 구축 및 배포에 사용합니다.

VS의 SDK를 으로써 VS가 SDK 할 수 .global.json 실행해 줄서다dotnet new globaljson, 「」를 합니다."version"버전을 값(「SDK 사용」)dotnet --list-sdks★★★★★★★★★★★★★★★★★★★★★」

이것은 A와 B가 모두 실행 가능하고 자체 appsettings.json이 있는 프로젝트 의존관계 A->B가 있다면 B의 모든 기능을 갖춘 셸 프로젝트로서 B1로 프로젝트 B를 분할하는 것이 바람직하다는 것을 의미합니다.이것에 의해, 의존 관계 A-> B2 및 B1-> B2에 의해서, 「복수의 퍼블리시 출력 파일」의 문제가 회피됩니다.

compilerconfig.jsonscs의 css를 하기 위해 합니다.UI를 통해 가장 쉽게 해결할 수 있는 것은 다음과 같습니다.

Open Solution Explorer->compilerconfig.json->right click->properties을 사용하다

Build Action: None
Copy to Output Directory: Do not copy

모든 컴파일러.config 파일에 대해 이 작업을 수행합니다(클라이언트 프로젝트 및 서버상의 경우).

그 이유는 이 컴파일러 구성이 빌드 프로세스에서만 로컬로 사용되며 앱 실행 중에는 나중에 필요하지 않기 때문입니다.

여기에 이미지 설명 입력

프로젝트(같은 솔루션의 모든 부분)에서 동일한 nuget pacage의 다른 버전을 사용하는 경우 이 오류가 나타납니다.이제 어떤 이유로 두 버전을 모두 유지해야 하는 경우(좋은 방법이 아님)에 답변에서 언급된 다른 해결 방법을 찾을 수 있습니다.

또는 올바른 작업을 수행하여 모든 프로젝트가 동일한 버전의 패키지를 사용하는지 확인하십시오.Visual Studio의 NuGet 패키지 매니저를 열면 스크린샷에 표시된 솔루션과 같이

여기에 이미지 설명 입력

" " " " 가 됩니다.consolidate맨 위에 있는 탭을 클릭합니다.버전이 충돌하는 경우 왼쪽에 NuGet 패키지의 lisr=t가 표시됩니다.만약 그렇다면 그것은 당신에게 갈등이 있다는 것을 의미합니다.임의의 패키지를 클릭하면 다음 스크린샷과 같이 우측에 솔루션 프로젝트 목록이 표시됩니다.

여기에 이미지 설명 입력

이 예(스크린샷)에서는 Microsoft 버전이 2개 있습니다.Net.Sdk.3.0.13 및 3.0.11과 함께 기능합니다.원하는 버전을 선택하고 설치를 클릭하면 두 프로젝트가 동일한 버전으로 업데이트됩니다.변경 및 개발 빌드를 다시 푸시하여 즐기십시오.

API와 Hangfire 두 가지 프로젝트가 있습니다.중복은 API와 Hangfire 프로젝트를 모두 사용하기 때문에 Hangfire를 퍼블리싱하고 있었고 퍼블리싱 스텝 전에 앱 설정 파일을 삭제하여 해결했습니다.

COPY . .
RUN find ${API} -iname "appsettings*.json" -exec rm {} \;
RUN dotnet publish ${HANGFIRE}/*.csproj --configuration Release --output out --no-restore

마이크로소프트를 설정함으로써 해결할 수 있었습니다.NET.ConflictResolution.targets 파일은 <NetsdkErrorCondition='$(_ResolvedFileToPublishContainsDuplicates)' == 'false' " <= 원래 참이었습니다.

이 파일은 "\Program Files\dotnet\sdk\6.0.100\Sdks\Microsoft"에 있습니다.NET.Sdk\targets"

언급URL : https://stackoverflow.com/questions/69919664/publish-error-found-multiple-publish-output-files-with-the-same-relative-path

반응형