ฉัน "แก้ไข" (สร้างวิธีแก้ไข) ด้วยวิธีที่ง่ายกว่านี้
ในการสร้างโพสต์
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
คำสั่งpost build ฉัน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 เผยแพร่ที่กำลังมองหาหรือobj\Debug
obj\Release
เราไม่ได้มีมันในระหว่างการสร้างเพราะสร้างสร้างหรือobj\x64\Release
obj\x86\Release
บรรทัดที่ 1 และ 2 ช่วยบรรเทาปัญหานี้ ในบรรทัดที่ 3 ฉันบอกdotnet.exe
ให้ใช้การกำหนดค่าเฉพาะและรันไทม์เป้าหมาย มิฉะนั้นเมื่อเป็นโหมดดีบักฉันจะไม่สนใจเกี่ยวกับสิ่งที่รันไทม์และคำเตือน และในบรรทัดสุดท้ายฉันก็แค่ใช้ dll ของฉันแล้วคัดลอกไปที่โฟลเดอร์ผลลัพธ์ งานเสร็จแล้ว
dotnet publish
be hack? รวมคำสั่งในไฟล์ csproj ของคุณเป็นสคริปต์สร้างโพสต์