新しいsgenタスク定義を作成すると、問題が発生します。タスクを意図したとおりに機能させるために必要な変数を設定するだけです。とにかく、マイクロソフトのドキュメントにはいくつかの重要な情報が欠けています。
シリアル化アセンブリを事前生成する手順
( http://msdn.microsoft.com/en-us/library/ff798449.aspxのパーツを使用)
- Visual Studio 2010のソリューションエクスプローラーで、シリアル化アセンブリを生成するプロジェクトを右クリックし、[プロジェクトのアンロード]をクリックします。
- ソリューションエクスプローラーで、シリアル化アセンブリを生成するプロジェクトを右クリックし、[。csprojの編集]をクリックします。
.csprojファイルの要素の直後に<TargetFrameworkVersion>v?.?</TargetFrameworkVersion>
、次の要素を追加します。
<SGenUseProxyTypes>false</SGenUseProxyTypes>
<SGenPlatformTarget>$(Platform)</SGenPlatformTarget>
.csprojファイル、各プラットフォーム構成
例えば<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
次の行を追加します。
<GenerateSerializationAssemblies>On</GenerateSerializationAssemblies>
.csprojファイルを保存して閉じます。
- ソリューションエクスプローラーで、編集したプロジェクトを右クリックし、[プロジェクトの再読み込み]をクリックします。
この手順により、出力フォルダーに.xmlSerializers.dllという名前の追加のアセンブリが生成されます。このアセンブリをソリューションとともに展開する必要があります。
説明
SGenは、デフォルトではプロキシタイプに対してのみ「任意のCPU」に対して生成されます。これは、プロジェクトファイルで対応する変数を設定しない場合に発生します。
PlatformTargetと一致するには、SGenPlatformTargetが必要です。これはプロジェクトテンプレートのバグだと思う傾向があります。sgenターゲットプラットフォームがプロジェクトのものと異なる必要があるのはなぜですか?その場合、ランタイム例外が発生します
0x80131040:見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません
プロジェクトファイルを分析することで、msbuildタスク定義を見つけることができます。
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
ここで、MSBuildToolsPathはhttp://msdn.microsoft.com/en-us/library/bb397428.aspxに依存します<TargetFrameworkVersion>
TargetFrameworkVersion4.0のSGenタスク定義の内部を
Windowsインストールパス\Microsoft.NET\ Framework \ v4.0.30319 \ Microsoft.CSharp.targets
$(SGenPlatformTarget)のような文書化されていない変数を表示するには、プロジェクトファイルで自由に設定できます
<Target
Name="GenerateSerializationAssemblies"
Condition="'$(_SGenGenerateSerializationAssembliesConfig)' == 'On' or ('@(WebReferenceUrl)'!='' and '$(_SGenGenerateSerializationAssembliesConfig)' == 'Auto')"
DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource"
Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)"
Outputs="$(IntermediateOutputPath)$(_SGenDllName)">
<SGen
BuildAssemblyName="$(TargetFileName)"
BuildAssemblyPath="$(IntermediateOutputPath)"
References="@(ReferencePath)"
ShouldGenerateSerializer="$(SGenShouldGenerateSerializer)"
UseProxyTypes="$(SGenUseProxyTypes)"
KeyContainer="$(KeyContainerName)"
KeyFile="$(KeyOriginatorFile)"
DelaySign="$(DelaySign)"
ToolPath="$(SGenToolPath)"
SdkToolsPath="$(TargetFrameworkSDKToolsDirectory)"
EnvironmentVariables="$(SGenEnvironment)"
SerializationAssembly="$(IntermediateOutputPath)$(_SGenDllName)"
Platform="$(SGenPlatformTarget)"
Types="$(SGenSerializationTypes)">
<Output TaskParameter="SerializationAssembly" ItemName="SerializationAssembly"/>
</SGen>
</Target>