আমি এটিকে সহজ উপায়ে "সমাধান" (চারপাশের তৈরি কাজ) করেছি।
পোস্ট বিল্ড ইন
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 আপডেট 4 এর v2.0.3 ছিল। এবং আপডেট 8 এর 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>
আমার কেন এটি দরকার এবং কেন আপনি এগুলি ছাড়তে পারেন? আমার এটির প্রয়োজন ছিল কারণ আমার বিল্ড প্রোগ্রামটি সতর্কতা এমএসবি 3270 কে বাধা দেওয়ার জন্য সেট করা আছে , এবং বিল্ডটি প্রদর্শিত হলে ব্যর্থ হয়। এই সতর্কতাটি বলে, "আরে, আপনার নির্ভরতার কিছু ফাইল ভুল ফর্ম্যাটের"। কিন্তু আপনি কি এই অনুশীলনের লক্ষ্য মনে করেন? আমাদের প্যাকেজ নির্ভরতা ডিএলএল টানতে হবে। এবং অনেক ক্ষেত্রেই এই সতর্কতাটি রয়েছে কিনা তা বিবেচ্য নয় কারণ নিম্নলিখিত পোস্ট বিল্ডের যত্ন নেই। আবার এটি আমার বিল্ড প্রোগ্রাম যা যত্নশীল। সুতরাং, আমি RuntimeIdentifierউত্পাদন বিল্ড করার সময় আমি কেবলমাত্র দুটি কনফিগারেশন যুক্ত করেছি।
সম্পূর্ণ পোস্ট বিল্ড
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
ব্যাখ্যা: ডটনেট প্রকাশের সন্ধান করছে obj\Debugবা obj\Release। বিল্ড চলাকালীন আমাদের এটি নেই কারণ বিল্ড তৈরি করে obj\x64\Releaseবা তৈরি করে obj\x86\Release। 1 এবং 2 লাইনটি এই সমস্যাটি প্রশমিত করে। লাইন 3 এ আমি dotnet.exeনির্দিষ্ট কনফিগারেশন এবং লক্ষ্য রানটাইম ব্যবহার করতে বলি । অন্যথায়, যখন এটি ডিবাগ মোড হয়, আমি রানটাইম স্টাফ এবং সতর্কতাগুলির বিষয়ে চিন্তা করি না। এবং শেষ লাইনে আমি কেবল আমার dlls নিয়ে কপি করে আউটপুট ফোল্ডারে রাখি। কাজ শেষ.
dotnet publishহ্যাক ব্যবহার করা হবে? পোষ্ট বিল্ড স্ক্রিপ্ট হিসাবে আপনার সিএসপোজ ফাইলটিতে কমান্ডটি অন্তর্ভুক্ত করুন।