Bunu daha basit bir şekilde "çözdüm" (geçici bir çalışma yarattım).
Post yapıda
dotnet publish "$(ProjectFileName)" --no-build -o pub
xcopy "$(ProjectDir)pub\3rdPartyProvider.*.dll" "$(OutDir)"
pub
yayınlanan içeriklerinizin hazırlanmasını istediğiniz klasördür
NOT: Kullandığınız versiyona bağlı olarak dotnet.exe
komut --no-build
kullanılamayabilir.
Örneğin, v2.0.3'te mevcut değildir; ve v2.1.402'de mevcuttur. VS2017 Update4'ün v2.0.3'e sahip olduğunu biliyorum. Güncelleme8'de 2.1.x var
Güncelleme:
Yukarıdaki kurulum, temel hata ayıklama ortamında çalışacaktır, ancak bunu sunucu / üretim ortamına yerleştirmek için daha fazlasına ihtiyaç vardır. Ben çözmek zorunda olduğu bu özel örnekte, inşa Release|x64
ve Release|x86
ayrı ayrı. Bu yüzden ikisini de hesaba kattım. Ancak post build dotnet publish
komutunu desteklemek için önce RuntimeIdentifier
proje dosyasına ekledim .
<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>
Neden buna ihtiyacım vardı ve neden onsuz kurtulabilirsin? Çünkü bu gerekli benim yapı programı yolunu kesmek uyarı olarak ayarlanır MSB3270 ve görünürse yapı başarısız. Bu uyarı, "bağımlılıklarınızdaki bazı dosyalar yanlış formatta" diyor. Ama bu egzersizin amacını hatırlıyor musunuz? Paket bağımlılık DLL'lerini çekmemiz gerekiyor. Ve çoğu durumda, bu uyarının orada olup olmadığı önemli değildir, çünkü sonraki derleme sonrası bunu önemsemez. Yine, bu benim derleme programım. Bu nedenle, yalnızca RuntimeIdentifier
üretim derlemesi sırasında kullandığım 2 yapılandırmaya ekledim .
Tam Gönderi yapısı
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
Açıklama: dotnet publish obj\Debug
veya arıyor obj\Release
. Oluşturma sırasında buna sahip değiliz çünkü build obj\x64\Release
veya obj\x86\Release
. Satır 1 ve 2 bu sorunu hafifletir. 3. satırda, dotnet.exe
belirli bir yapılandırma ve hedef çalışma zamanı kullanmayı söylüyorum . Aksi takdirde, bu hata ayıklama modu olduğunda, çalışma zamanı işleri ve uyarıları umursamıyorum. Ve son satırda dll'lerimi alıp çıktı klasörüne kopyalıyorum. İş bitmiş.
dotnet publish
bir hack olsun? Komutu, derleme sonrası komut dosyası olarak csproj dosyanıza ekleyin.