14

いくつかの同様の質問と回答を見つけることができましたが、私の状況に当てはまる回答や正確な条件はありませんでした.

  1. x64 用にビルドされている .NET 3.5 プロジェクトがあります。
  2. また、x64 混合モード リファレンスもあります (これも .NET 3.5 を対象としています)。
  3. Visual Studio 2008 で、リリース ビルド中に SGEN を実行してヘルパー DLL を作成する Web 参照を作成しました。

を参照しない場合mixed-mode DLL、これは正常に機能します。混合モードの DLL を参照すると、次のエラーが発生します (xxx は単なるプレースホルダーです)。

SGEN : エラー : 不適切な形式のアセンブリを読み込もうとしました: C:\code\xxx\trunk\xxx\common\xxx\build\winx64\lib\xxx.dll.

これは発行されるコマンドです:

C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\sgen.exe /assembly:C:\code\xxx\trunk\xxx\xxx\obj\x64\Release\xxx.dll /proxytypes /reference: ..\common\xxx\build\winx64\lib\xxx.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.configuration.dll /reference:C:\Windows\Microsoft.NET \Framework\v2.0.50727\System.Configuration.Install.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\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 /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\System.Runtime.Serialization.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\ System.ServiceModel.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Web.Extensions.dll" /reference:C:\Windows\Microsoft.NET\ Framework\v2.0.50727\System.Web.Services.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll/参照:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Web.Services.dll /参照:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll/参照:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Web.Services.dll /参照:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll

何か案は?

4

4 に答える 4

33

この msdn の投稿で提案されているように、に変更Generate serialization assemblyしてみましたか? 私の場合、それがチケットでした。Off

プロジェクトのプロパティに移動するだけで、ビルドの下にあります。

プロジェクトのプロパティ - ビルド

于 2013-02-28T02:26:11.443 に答える
2

これは、オンドレイの 答えに代わるものです。

プロジェクト ファイル (csproj) でリリース構成を変更し、SDK パスを 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>
于 2015-06-04T15:11:36.533 に答える
2

シリアライゼーション アセンブリをオフにすると問題は解決しますが、これは回避策に過ぎません。最終的には、起動時間が遅くなるという代償を払うことになります。問題は、x64 SDK から sgen.exe を呼び出す必要があることです (x64 をターゲットにしている場合)。msbuild を使用している場合は、次のように sgen への正しいパスを設定します。

<MSBuild Projects="$(MSBuildProjectLocation)" Targets="Build"
    Properties="....
    SGenToolPath=C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\x64;" 
/>
于 2013-12-12T12:38:50.160 に答える