2012-11-14 24 views
15

में एक गलत प्रारूप के साथ असेंबली को लोड करने का प्रयास किया गया था, मैं कई समान प्रश्न पूछने और उत्तर देने में सक्षम था, लेकिन मेरी स्थिति पर लागू उत्तरों या सटीक शर्तों में से कोई भी नहीं।एसजीईएन विफलता: वीएस -2008

  1. मेरे पास x64 के लिए एक .NET 3.5 प्रोजेक्ट बनाया गया है।
  2. मेरे पास एक x64 मिश्रित मोड संदर्भ भी है (.NET 3.5 को भी लक्षित करता है)।
  3. विजुअल स्टूडियो 2008 में, मैंने एक वेब संदर्भ बनाया जो एसजीईएन को रिलीज बिल्ड के दौरान सहायक डीएलएल बनाने के लिए निष्पादित करता है।

यदि मैं mixed-mode DLL का संदर्भ नहीं देता, तो यह ठीक काम करता है। अगर मैं संदर्भ मिश्रित मोड DLL करते हैं, मैं इस त्रुटि मिलती है (xxx सिर्फ एक प्लेसहोल्डर है):

SGEN: त्रुटि: C: एक प्रयास एक गलत स्वरूप के साथ एक विधानसभा लोड करने के लिए बनाया गया था \ कोड \ xxx \ ट्रंक \ xxx \ आम \ xxx \ \ winx64 \ lib \ xxx.dll निर्माण।

यह आदेश जारी किया जा रहा है:

सी: \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ बिन \ sgen.exe /विधानसभा: C: \ कोड \ xxx \ ट्रंक \ xxx \ xxx \ obj \ x64 \ रिलीज \ xxx.dll /प्रॉक्सीटाइप/रेफरेंस :..commcommon\xxx\build\winx64\lib\xxx.dll /संदर्भ: सी: \ विंडोज \ माइक्रोसॉफ्ट.NET \ फ्रेमवर्क \ v2.0.50727 \ System.configuration.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Configuration.Install.dll /संदर्भ: "सी: \ प्रोग्राम फ़ाइलें (x86) \ संदर्भ असेंबली \ Micr osoft \ Framework \ v3.5 \ System.Core.dll " /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET \ Framework \ v2.0.50727 \ System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.EnterpriseServices.dll /reference:C:\Windows\assembly\GAC_MSIL\ सिस्टम। प्रबंधन .ऑटोमेशन \ 1.0.0.0__31bf3856ad364e35 \ System.Management.Automation.dll /संदर्भ: "सी: \ प्रोग्राम फ़ाइलें (x86) \ संदर्भ असेंबली \ माइक्रोसॉफ्ट \ फ्रेमवर्क \ v3.0 \ System.Runtime.Serialization.dll" /संदर्भ: "सी: \ प्रोग्राम फ़ाइलें (x86) \ संदर्भ असेंबली \ माइक्रोसॉफ्ट \ फ्रेमवर्क \ v3.0 \ System.ServiceModel.dll" /संदर्भ: "सी: \ प्रोग्राम फ़ाइलें (x86) \ संदर्भ असेंबली \ माइक्रोसॉफ्ट \ Framework \ v3.5 \ System.Web.Extensions.dll " /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Web.Services.dll /संदर्भ: सी: \ विंडोज \ माइक्रोसॉफ्ट.NET \ Framework \ v2.0.50727 \ System.Xml.dll

कोई विचार?

उत्तर

31

क्या आपने Generate serialization assembly से Off को बदलने की कोशिश की है, जैसा कि this msdn post में सुझाया गया है? मेरे मामले में, वह टिकट था।

बस अपने प्रोजेक्ट गुणों पर जाएं, और यह बिल्ड के तहत है।

Project Properties - Build

+0

काम करता है, दुख की बात है मैं नहीं जानता पर प्रभाव पड़ सकता है मुझे –

2

क्रमबद्धता विधानसभा को बंद करने, समस्या को हल करते हैं, यह सिर्फ समाधान नहीं है - अंत में आप धीमी समय शुरू के साथ इसके लिए भुगतान करेंगे। समस्या यह है कि आपको sgen को कॉल करना होगा।x64 एसडीके से exe (यदि आप x64 को लक्षित कर रहे हैं)। आप MSBuild का उपयोग कर रहे हैं, तो इस तरह sgen करने के लिए सही पथ सेट:

<MSBuild Projects="$(MSBuildProjectLocation)" Targets="Build" 
    Properties=".... 
    SGenToolPath=C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\x64;" 
/> 
+1

का कारण बनने के लिए मैं वीएस का उपयोग कर रहा हूं। डीबग मोड में सब कुछ ठीक है, लेकिन रिलीज मोड में मुझे यह त्रुटि मिलती है। तो, मैं क्या बदलूं और, और अधिक महत्वपूर्ण बात कहां? यही है, फाइल कहां है? –

3

यह त्रुटि भी निर्माण मशीन पर (विजुअल स्टूडियो 2013 के लिए) MSBuild Toolset स्थापित करने के बाद दिखाई नहीं देता। समस्या यह है कि sgen.exe का केवल 32 बिट संस्करण डिफ़ॉल्ट रूप से उपलब्ध है।

http://msdn.microsoft.com/en-us/windows/desktop/bg162891.aspx

एक एजेंट (मशीन) पर मैं भी पुराने संस्करण को स्थापित करने के लिए आवश्यक:

नवीनतम Windows SDK जो sgen.exe के 64bit संस्करण भी शामिल है स्थापित करने के बाद

समस्या गायब हो जाता है

http://msdn.microsoft.com/en-us/windows/desktop/hh852363.aspx

2

यह Ondrej'sanswer का विकल्प है।

हम सिर्फ प्रोजेक्ट फ़ाइल (csproj) में हमारे रिलीज विन्यास के लिए संशोधन कर दिया और x64 संस्करण के लिए एसडीके पथ सेट:

मेरे लिए
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    ... 
    ... 
    ... 
    <GenerateSerializationAssemblies>On</GenerateSerializationAssemblies> 
    <SDK40ToolsPath>C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64</SDK40ToolsPath> 
    </PropertyGroup> 
+0

आप लोग कहां बदल रहे हैं? फाइल कहां है? –

+0

मेरे अपने प्रश्न का उत्तर दें - यह प्रोजेक्ट फ़ाइल (.scproj) है। एक और सवाल बनी हुई है: क्यों समस्या डीबग बिल्ड में प्रकट नहीं होती है, लेकिन रिलीज बिल्ड में दिखाई देती है? –

+1

@ user1760329 इस [उत्तर] (http://stackoverflow.com/a/9187464/73986) के अनुसार, यदि 'सीरियलाइजेशन असेंबली जेनरेट करें' को 'ऑटो' पर सेट किया गया है, तो इसे डीबग और रिलीज के लिए बंद कर दिया जाएगा (यदि आपके कोड में 'XmlSerializer' का उपयोग किया जाता है)। –

संबंधित मुद्दे