나는 이것을 더 간단한 방법으로 "해결"(해결책을 만들었다).
빌드 후
dotnet publish "$(ProjectFileName)" --no-build -o pub
xcopy "$(ProjectDir)pub\3rdPartyProvider.*.dll" "$(OutDir)"
pub
게시 된 항목을 스테이징 할 폴더입니다.
참고 :dotnet.exe
사용 하는 버전에 따라--no-build
하지 못할 수 있습니다.
예를 들어 v2.0.3에서는 사용할 수 없습니다. v2.1.402에서 사용할 수 있습니다. VS2017 Update4에 v2.0.3이 있다는 것을 알고 있습니다. Update8에는 2.1.x가 있습니다.
최신 정보:
위의 설정은 기본 디버그 환경에서 작동하지만 빌드 서버 / 프로덕션 환경에 배치하려면 더 많은 것이 필요합니다. 내가 해결해야한다고 위의 예에서, 구축 Release|x64
및 Release|x86
별도. 그래서 저는 둘 다 설명했습니다. 하지만 빌드 후 dotnet publish
명령 을 지원하기 위해 먼저 RuntimeIdentifier
프로젝트 파일에 추가 했습니다.
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutputPath>..\..\lib\</OutputPath>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
<OutputPath>..\..\lib\</OutputPath>
<RuntimeIdentifier>win-x86</RuntimeIdentifier>
</PropertyGroup>
왜 내가 그것을 필요로했고 왜 그것없이 도망 갈 수 있습니까? 내 빌드 프로그램이 경고 MSB3270 을 가로 채고 표시 되면 빌드가 실패하도록 설정 되었기 때문에 이것이 필요 했습니다. 이 경고는 "종속성에있는 일부 파일의 형식이 잘못되었습니다."라고 말합니다. 하지만이 운동의 목표를 기억하십니까? 패키지 종속성 DLL을 가져와야합니다. 그리고 많은 경우에이 경고가 있는지 여부는 사후 빌드가 상관하지 않기 때문에 중요하지 않습니다. 다시 말하지만 이것은 내 빌드 프로그램입니다. 따라서 RuntimeIdentifier
프로덕션 빌드 중에 사용하는 2 개의 구성 만 추가 했습니다.
전체 포스트 빌드
if not exist "$(ProjectDir)obj\$(ConfigurationName)" mkdir "$(ProjectDir)obj\$(ConfigurationName)"
xcopy "$(ProjectDir)obj\$(PlatformName)\$(ConfigurationName)" "$(ProjectDir)obj\$(ConfigurationName)" /E /R /Y
if $(ConfigurationName) == Release (
dotnet publish "$(ProjectFileName)" --runtime win-$(PlatformName) --no-build -c $(ConfigurationName) -o pub --no-restore --no-dependencies
) else (
dotnet publish "$(ProjectFileName)" --no-build -c $(ConfigurationName) -o pub --no-restore --no-dependencies
)
xcopy "$(ProjectDir)pub\my3rdPartyCompany.*.dll" "$(OutDir)" /Y /R
설명 : dotnet publish에서 obj\Debug
또는을 (를 ) 찾고 obj\Release
있습니다. 빌드가 obj\x64\Release
또는 obj\x86\Release
. 1 행과 2 행은이 문제를 완화합니다. 3 행에서 dotnet.exe
특정 구성 및 대상 런타임을 사용하도록 지시합니다. 그렇지 않으면 이것이 디버그 모드 일 때 런타임 항목과 경고에 대해 신경 쓰지 않습니다. 그리고 마지막 줄에서 dll을 가져 와서 출력 폴더에 복사합니다. 완료되었습니다.
dotnet publish
해킹을 사용 하는 이유는 무엇 입니까? 빌드 후 스크립트로 csproj 파일에 명령을 포함합니다.