2012-11-14 36 views
15

Tôi đã tìm được một số câu hỏi tương tự được hỏi và trả lời, nhưng không có câu trả lời hoặc điều kiện chính xác nào được áp dụng cho tình huống của tôi.Lỗi SGEN: Một nỗ lực được thực hiện để tải một assembly có định dạng không chính xác trong VS2008

  1. Tôi có dự án .NET 3.5 được xây dựng cho x64.
  2. Tôi cũng có tham chiếu chế độ hỗn hợp x64 (cũng nhắm mục tiêu .NET 3.5).
  3. Trong Visual Studio 2008, tôi đã tạo một Tham chiếu Web khiến SGEN thực thi trong khi xây dựng Bản phát hành để tạo DLL trợ giúp.

Nếu tôi không tham khảo mixed-mode DLL, điều này có hiệu quả. Nếu tôi làm tham khảo chế độ DLL hỗn hợp, tôi nhận được lỗi này (xxx chỉ là một giữ chỗ):

sgen: lỗi: Một cố gắng đã được thực hiện để nạp một assembly với một định dạng không đúng : C: \ đang \ xxx \ trunk \ xxx \ common \ xxx \ build \ winx64 \ lib \ xxx.dll.

Đây là lệnh được ban hành:

C: \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ bin \ sgen.exe /lắp ráp: C: \ đang \ xxx \ trunk \ xxx \ xxx \ obj \ x64 \ Release \ xxx.dll /proxytypes /reference:..common\xxx\build\winx64\lib\xxx.dll /tham chiếu: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Configuration.Install.dll /tham chiếu: "C: \ Program Files (x86) \ Tham khảo Hội đồng \ 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\System.Management .Automation \ 1.0.0.0__31bf3856ad364e35 \ System.Management.Automation.dll /tham chiếu: "C: \ Program Files (x86) \ Tham khảo Tập hợp \ Microsoft \ Framework \ v3.0 \ System.Runtime.Serialization.dll" /tham khảo: "C: \ Program Files (x86) \ Tham khảo Assemblies \ Microsoft \ Framework \ v3.0 \ System.ServiceModel.dll" /tham chiếu: "C: \ Program Files (x86) \ Tham chiếu Assemblies \ Microsoft \ Framework \ v3.5 \ System.Web.Extensions.dll " /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Web.Services.dll /tham chiếu: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Xml.dll

Bất kỳ ý tưởng nào?

Trả lời

31

Bạn đã thử thay đổi Generate serialization assembly thành Off, như được đề xuất trong this msdn post? Trong trường hợp của tôi, đó là tấm vé.

Chỉ cần chuyển đến thuộc tính Dự án của bạn và thuộc tính Xây dựng.

Project Properties - Build

+0

trình đối với tôi, Đáng buồn là tôi không biết tác động là có thể gây ra cho tôi –

2

Trong khi chuyển lắp ráp tuần tự tắt, sẽ giải quyết được vấn đề, nó chỉ là cách giải quyết - cuối cùng bạn sẽ trả cho nó bằng chậm thời gian khởi động. Vấn đề là bạn phải gọi sgen.exe từ x64 SDK (nếu bạn đang nhắm mục tiêu x64). Nếu bạn đang sử dụng msbuild, thiết lập đường dẫn chính xác để sgen như thế này:

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

Tôi đang sử dụng VS để xây dựng. Mọi thứ đều ổn trong chế độ Debug, nhưng ở chế độ Release, tôi nhận được lỗi này. Vì vậy, tôi phải thay đổi điều gì và quan trọng hơn là ở đâu? Đó là, đâu là tập tin? –

3

Lỗi này cũng bật lên trên một máy xây dựng sau khi cài đặt MSBuild Toolset (cho Visual Studio 2013). Vấn đề là chỉ có phiên bản 32bit của sgen.exe có sẵn theo mặc định.

Vấn đề sẽ biến mất sau khi cài đặt mới nhất của Windows SDK trong đó bao gồm các phiên bản 64Bit của sgen.exe:

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

Trên một đại lý (máy) Tôi cần thiết để cài đặt các phiên bản cũ hơn cũng như:

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

2

Đây là giải pháp thay thế cho Ondrej'sanswer.

Chúng tôi chỉ cần thực hiện các sửa đổi đối với cấu hình phát hành của chúng tôi trong hồ sơ dự án (csproj) và thiết lập đường dẫn SDK phiên bản 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

bạn đang thực hiện những thay đổi đó ở đâu? đâu là tập tin? –

+0

Trả lời câu hỏi của riêng tôi - đó là tệp dự án (.scproj). Vẫn còn một câu hỏi khác: tại sao vấn đề không xuất hiện trong bản dựng gỡ lỗi, nhưng có xuất hiện trong bản phát hành bản phát hành không? –

+1

@ user1760329 Theo [answer] (http://stackoverflow.com/a/9187464/73986), nếu 'Generate serialization assembly' được đặt thành' Auto', nó sẽ được tắt cho Debug và on for Release (nếu 'XmlSerializer' được sử dụng trong mã của bạn). –