Генерация блока XML-сериализации как часть моей сборки

У меня нет компилятора Java8, поэтому я не могу проверить свой ответ. Но будет ли это работать, если вы определили переменную «факт» как окончательную?

final IntToDoubleFunction fact = x -> {
    return  ( x == 0)?1:x* fact.applyAsDouble(x-1);
};
64
задан John Saunders 20 July 2009 в 17:38
поделиться

4 ответа

Это - то, как мне удалось сделать это путем изменения сценария MSBUILD в моем.CSPROJ файле:

Первый, откройте свой.CSPROJ файл как файл, а не как проект. Прокрутите к нижней части файла, пока Вы не находите, что это прокомментировало код, незадолго до завершения тега Проекта:

<!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->

Теперь мы просто вставляем нашу собственную цель AfterBuild для удаления любого существующего XmlSerializer и SGen наше собственное, как так:

<Target Name="AfterBuild" DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource" Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)" Outputs="$(OutputPath)$(_SGenDllName)">
   <!-- Delete the file because I can't figure out how to force the SGen task. -->
   <Delete
     Files="$(TargetDir)$(TargetName).XmlSerializers.dll"
     ContinueOnError="true" />
   <SGen
     BuildAssemblyName="$(TargetFileName)"
     BuildAssemblyPath="$(OutputPath)"
     References="@(ReferencePath)"
     ShouldGenerateSerializer="true"
     UseProxyTypes="false"
     KeyContainer="$(KeyContainerName)"
     KeyFile="$(KeyOriginatorFile)"
     DelaySign="$(DelaySign)"
     ToolPath="$(TargetFrameworkSDKToolsDirectory)"
     Platform="$(Platform)">
      <Output
       TaskParameter="SerializationAssembly"
       ItemName="SerializationAssembly" />
   </SGen>
</Target>

, Который работает на меня.

56
ответ дан Justin Dearing 24 November 2019 в 15:43
поделиться

Другие ответы на этот вопрос уже упомянули Свойства проекта-> Сборка-> установка Generate Serialization Assemblies , но по умолчанию это только генерирует блок, если будет" типы прокси веб-сервиса XML " в проекте.

лучший способ понять точное поведение Visual Studio состоит в том, чтобы быть исследовать цель GenerateSerializationAssemblies в C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 ** Microsoft. Common.targets ** файл.

можно проверить результат этой задачи сборки из окна Visual Studio Output и выбора Сборка от Выставочный вывод от [1 114]: выпадающее поле. Необходимо видеть что-то вроде

C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin\sgen.exe/assembly:D:\Temp\LibraryA\obj\Debug\LibraryA.dll / proxytypes/reference:../compiler:/delaysign-LibraryA-> D:\Temp\LibraryA\bin\Debug\LibraryA.dll

ключевой пункт здесь / переключатель proxytypes. Можно читать о различных переключателях для Инструмент Генератора Сериализатора XML (Sgen.exe)

, Если Вы знакомы с MSBuild, Вы могли бы настроить цель GenerateSerializationAssemblies так, чтобы задача SGen имела атрибут UseProxyTypes = "ложь" вместо истинного, но тогда необходимо принять всю связанную ответственность настройки Visual Studio / система MSBuild. Кроме того, Вы могли просто расширить свой процесс сборки для вызова SGen вручную без переключателя/proxytypes.

, Если Вы читаете документацию для SGen, они довольно ясны, что Microsoft хотела ограничить использование этого средства. Учитывая уровень шума по этой теме, довольно ясно, что Microsoft не сделала отличной работы с документированием опыта Visual Studio. Существует даже Обратная связь Подключения , объект для этой проблемы и ответа не является большим.

28
ответ дан Martin Hollingsworth 24 November 2019 в 15:43
поделиться

Посмотрите в свойствах на решении. На вкладке сборки в нижней части существует выпадающее, названное, "Генерируют блок Сериализации"

1
ответ дан Darren Kopp 24 November 2019 в 15:43
поделиться

На случай, если кто-то еще столкнется с этой проблемой внезапно после того, как раньше все работало нормально: для меня это было связано с «Включить только мой код (только управляемый) ) "снимается флажок в меню параметров (Параметры -> Отладка) (который был автоматически отключен после установки .NET Reflector).

РЕДАКТИРОВАТЬ: Это означает, конечно, что это исключение происходило раньше, но когда параметр "Включить только мой код" отключен, помощник по отладке (если он включен) остановится на этом этапе, когда брошен.

2
ответ дан 24 November 2019 в 15:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: