SORU
28 EYLÜL 2008, Pazar


Her iki hedef 32 bit ve 64 bit aynı çözüm/proje Visual Studio ile

Birden çok hedefleme benim visual studio oluşturur kurmak için nasıl küçük bir ikilem var.

Arka plan: c# .NET v2.P/0 3 parti 32 bit DLL, kompakt v3 SQL çağırma.Kur bir proje ile 5 SP1. Şu anda, platformu hedef Windows x 64 üzerinde çalışması için 86 ayarlanır.

3. parti şirket sadece kendi DLL 64 bit sürümleri yayımladı ve özel 64 bit bir program kurmak istiyorum.

Bu cevaplar henüz yok bazı soruları gündeme getiriyor. Aynı kod tabanı istiyorum. DLL veya DLL 64 bit ya da 32 bit set başvurular ile inşa etmeliyim. (3. Her iki taraf ve SQL Server Compact)

Bu yapılandırmaları () Debug64 ve Release64 2 yeni ayarlar ile çözülebilir mi ?

2 ayrı setup oluşturma projeleri(std. zorunda mıyım visual studio projeleri veya başka bir programı yok Wix), ya da bu aynı içinde çözülebilir .msı?

Herhangi bir fikir ve/veya önerileri memnuniyetle karşılanacaktır.

CEVAP
28 EYLÜL 2008, Pazar


Evet, aynı proje ve aynı kod tabanı ile hem x 86 x 64 hedef olabilir. Genel olarak, bazı şeyler Sadece İş oluşturuyorsanız, doğru çözüm yapılandırmaları VS.NET (her ne kadar P/Çağırmak için tamamen yönetilmeyen DLL olacak büyük ihtimalle gerektiren bazı koşullu kod): öğeleri buldum için özel bir dikkat gerektirir

  • Dış referansları aynı isim ama kendi özel verileri (bu da COM birlikte çalışma derlemeleri için geçerlidir) ile meclisleri başardı
  • MSI paketi daha önce de belirtildiği gibi, x 86 veya x 64 hedef için lazım olacak)
  • Herhangi bir özel .NET Yükleyici tabanlı Sınıf MSI paketinize eylemler

Kurul, başvuru konusu tamamen tek bir proje için verilen bir ad ile bir başvuru eklemek için izin verecek vs.net bir kez içinde çözülemez. Bu sorunu gidermek için, projeyi elle (VS, sağ projenizde Solution Explorer'da dosya, Proje seçin Kaldır, sonra yeniden sağ tıklatın ve Düzenle) dosyasını düzenleyin. Diyelim, bir derleme x 86 sürümü için bir referans ekledikten sonra, proje dosyası gibi bir şey içerir:

<Reference Include="Filename, ..., processorArchitecture=x86">
  <HintPath>C:\path\to\x86\DLL</HintPath>
</Reference>

Saran Başvuru ItemGroup etiketi geçerli çözüm yapılandırması gösteren etiket içinde, e.g:

<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
   <Reference ...>....</Reference>
</ItemGroup>

Daha sonra, ve tüm ItemGroup etiketi yapıştırın ve 64-bit DLL, örneğin: detayları içerecek şekilde düzenleyin

<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
  <Reference Include="Filename, ..., processorArchitecture=AMD64">
     <HintPath>C:\path\to\x64\DLL</HintPath>
   </Reference>
</ItemGroup>

Sonra yeniden projenizde VS.NET Derleme Başvuru iletişim olacak biraz karışık bu değişiklikleri ve karşılaşabileceğiniz bazı uyarılar hakkında derlemeler yanlış hedef işlemci, ama tüm yapıları olacak iş gayet iyi.

MSI bu sorunu çözme sırada olduğunu ve bu ne yazık ki . ben^>gerektiren bir non-VS.NET aracı tercih ederim Caphyon Advanced Installer bu amaçla, olarak çeker temel hile karıştırmak (oluşturma Bir ortak MSI yanı sıra 32-bit ve 64-bit belirli Msıs, ve bir .Zamanında EXE kurulum doğru sürümünü ayıklayın ve gerekli düzeltmeleri yapmak için başlatıcısı) çok, çok iyi.

Muhtemelen aynı sonuçları diğer araçları kullanarak elde edebilirsiniz veya Windows Installer XML (WiX) toolset, ama Gelişmiş Yükleyici hiç alternatifleri baktım bu işler bu kadar kolay (ve oldukça uygun olduğunu söylemek gerekir).

Bir şey . ben^>olabilirGelişmiş Yükleyici kullanarak bile yine de için WiX gerektirir, senin için .NET Sınıf özel eylem Yükleyici. Ancak bu önemsiz belirtmek için bazı eylemler bu sadece kaçak bazı platformlar (kullanarak VersionNT64 ve VersionNT64 yürütme koşulları, sırasıyla), yerleşik AI özel eylemler işlenir kullanarak 32-bit Çerçeve, hatta 64-bit makineler.

Bu olabilir, sabit bir gelecek bırakın, ama şimdilik (ya da kullanırken farklı bir araç oluşturmak için Msıs var aynı sorun) kullanabilirsiniz WiX 3.0 yönetilen özel eylem destek oluşturmak için eylem DLL dosyaları doğru verileri olacak idam kullanarak ilgili Çerçeve.


Edit: sürüm 8.1.2 olarak, Gelişmiş Yükleyici düzgün 64-bit özel eylemleri destekler. Benim orijinal cevap bu yana, fiyatı InstallShield ve onun ilk karşılaştırıldığında hala oldukça iyi bir değer olsa da biraz, ne yazık ki arttı


Edit: Eğer DLL GAC kayıtlı, standart referans etiketleri bu şekilde (örnek olarak SQLite) kullanabilirsiniz

<ItemGroup Condition="'$(Platform)' == 'x86'">
    <Reference Include="System.Data.SQLite, Version=1.0.80.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86" />
</ItemGroup>
<ItemGroup Condition="'$(Platform)' == 'x64'">
    <Reference Include="System.Data.SQLite, Version=1.0.80.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=AMD64" />
</ItemGroup>

Bu durum da her türlü yapı, release veya debug düşürülür ve sadece belirtir işlemci mimarisi.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BgirlNilaya

    BgirlNilaya

    29 EKİM 2008
  • Epic Tutorials for iPhone, iPad and iOS

    Epic Tutoria

    18 EYLÜL 2011
  • kindlechatmail

    kindlechatma

    25 AĞUSTOS 2010