Laden...

Serialisierungsassembly generieren?

Erstellt von iced-t89 vor 13 Jahren Letzter Beitrag vor 13 Jahren 5.329 Views
I
iced-t89 Themenstarter:in
279 Beiträge seit 2008
vor 13 Jahren
Serialisierungsassembly generieren?

Hallöschen,

in den Projekteigenschaften des Visual Studios gibt es ja, unter "Erstellen" die Option "Serialisierungsassembly generieren", wo landet die generierte Assembly?

Ich weis was das Tool sgen.exe macht und dachte mir diese Option kann mir Kommandozeilenarbeit abnehmen, jedoch habe ich das Gefühl das einfach rein garnix passiert.

Oder verstehe ich da etwas falsch 😃?

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

ich finde das hat MS etwas schlecht dokumentiert. Das Problem mit der Einstellung in VS ist dass sgen mit dem Parameter /proxytypes aufgerufen wird. D.h. es wird nur Serialisierungscode für Webservice-Proxytypen erstellt.

Wenn du keinen Webservice hast passiert somit nicht (außer dass in %Systemroot%\Temp ein Datei erstellt wird die keinen Inhalt hat).

Dieses Verhalten kann in der C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets-Datei (für .net 2.0 analog) unter dem Abschnitt GenerateSerializationAssemblies geändert werden - aber Achtung 😉 (siehe Kopfinformation der Datei).

Alternativ die Build-Ausgabe von VS in der Kommandozeile für sgen verwenden und dabei /proxytype weglassen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

B
387 Beiträge seit 2005
vor 13 Jahren

Hi,

... oder du fügst einfach diese paar Zeilen ziemlich am Ende der .csproj Datei ein
(Bei mir kommt danach nur noch ein <PropertyGroup> Tag):

  <Target Name="GenerateSerializationAssembliesForAllTypes" DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource" Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)" Outputs="$(OutputPath)$(_SGenDllName)">
    <SGen BuildAssemblyName="$(TargetFileName)" BuildAssemblyPath="$(OutputPath)" References="@(ReferencePath)" ShouldGenerateSerializer="true" UseProxyTypes="false" KeyContainer="$(KeyContainerName)" KeyFile="$(KeyOriginatorFile)" DelaySign="$(DelaySign)" ToolPath="$(SGenToolPath)">
      <Output TaskParameter="SerializationAssembly" ItemName="SerializationAssembly" />
    </SGen>
  </Target>
  <Target Name="AfterBuild" DependsOnTargets="GenerateSerializationAssembliesForAllTypes" />

Danach wird nach jedem erstellen auch die Datei DeinProjekt.XmlSerializers.dll erzeugt.

Gruß