2013-05-08 27 views
5

Uygulama 1'de I serileştirir, serileştirir ve nesneye geçer ve iyi çalışır. Nasıl paylaşırımUygulamalar arasında serileştirilmiş bir nesneyi paylaşma

Could not find assembly 'WindowsFormsApplication6, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

: Ben bu hatayı alıyorum bu serisini çalıştığınızda uygulamadan 2. o nesneyi tanımlayan sınıfı eklendi ben uygulamasında 2 kullanım durumu 1'den bir nesnedeki seriyi kaldırmak için ancak istiyorum iki uygulama arasındaki seri hale getirilmiş nesne o zaman?

+1

.NET ikili seri hale getirme kullanıyorsanız, aslında aynı temel türüne (aynı DLL'deki gibi) başvuruyor olmanız gerekir. Farklı bir türe de aktarmanız gerekirse, farklı bir serileştirme protokolü kullanmanız gerekir. –

+2

Seri hale getirilmiş sınıfın tanımını, her iki uygulamadan da referansladığınız (böylece sınıf tanımını paylaşan) ayrı bir sınıf kitaplığı derlemesine koymanız gerekir. –

cevap

7

Seri hale getirilebilir nesneyle ilgili tanımı ayrı bir gruba koyun ve sonra her bir projeye paylaşımlı aksamına bir başvuru ekleyin. (Biçimlendirici, ilk projenizdeki derleme için bir başvuru ekliyor - aslında sınıfın aynı bir kopyasını değil, aynı sınıfa başvurmalıdırlar)

+0

İyi bir çözüm. Her iki sürüm de aynı başvurulan montajı kullanması gerektiğinden, bunun sıkı bir bağlantı oluşturduğuna dikkat edin. Sürümleri gözden geçirmelisiniz. – Aphelion

5

BinaryFormatter kullanıyorsanız, tam DTO'nun içerdiği montajı içeren verilerde adı yazın (türler her zaman derleme tarafından tanımlanır). Burada bir seçenek, her birinden başvuruda bulunduğunuz ayrı bir DTO kitaplığı oluşturmaktır - ancak sürümde BinaryFormatter'un hala güvenilmez olduğunu unutmayın: DTO'larını düzenledikleri ve her şeyin çalışmayı bıraktıkları için insanların verileri kaybetmiş olduğunu gördüm.

Tipik olmayan bir seri hale getirici kullanmasını şiddetle tavsiye ederim; örneğin, XmlSerializer/DataContractSerializer/JSON.NET/ServiceStack'ın JsonSerializer veya protobuf-net. Bunların hepsi iyi çalışır ancak önemlisi iki farklı şekilde size savaşmazlar:

  • oldukları çok sürüm dostu
  • sen meclisleri arasındaki türlerini taşırsanız onlar umurumda değil

ile bile, seri hale getirilmiş tipler için ayrı bir DTO montajını sürdürmek en uygun olanıdır, ancak kuvveti sizin için değildir. Sonuç olarak, bu serileştiriciler OS/çapraz-sürüm/çapraz-dil/çapraz-CPU üzerinde çalışmaktan mutluluk duydukları için, sadece "farklı meclislerin" gerçeği "meh, her neyse" dir.

Anahtar teslimatı: BinaryFormatter kırılgan olabilir. Uçuş verileri dışında hiçbir şey için asla tavsiye etmem (örneğin, iki AppDomain örneği arasında remoting). Ben kesinlikle uzun bir süre için kalıcı olan herhangi bir şey için kullanmazdım, çünkü gelecekte yeniden yükleyebileceğimi garanti edemem.

+0

Diğer serileştiricilerden herhangi biri, saklanan görüntü nesnesini system.drawing.bitmap gibi serileştirmenizi sağlar mı? – AndyD273

+0

@Andy Orada yanlış sorunu çözdüğünü söyleyebilirim. Bitmap sınıfı uygulamasıdır. Diziselleştirmeniz gereken şey gerçek görüntü yükü olan bayt [] 'dır (muhtemelen iyi bilinen bir formatta). Çoğu serializer bir bayt [] işleyebilir –

İlgili konular