У меня нет компилятора Java8, поэтому я не могу проверить свой ответ. Но будет ли это работать, если вы определили переменную «факт» как окончательную?
final IntToDoubleFunction fact = x -> {
return ( x == 0)?1:x* fact.applyAsDouble(x-1);
};
Это - то, как мне удалось сделать это путем изменения сценария 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>
, Который работает на меня.
Другие ответы на этот вопрос уже упомянули Свойства проекта-> Сборка-> установка 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. Существует даже Обратная связь Подключения , объект для этой проблемы и ответа не является большим.
Посмотрите в свойствах на решении. На вкладке сборки в нижней части существует выпадающее, названное, "Генерируют блок Сериализации"
На случай, если кто-то еще столкнется с этой проблемой внезапно после того, как раньше все работало нормально: для меня это было связано с «Включить только мой код (только управляемый) ) "снимается флажок в меню параметров (Параметры -> Отладка) (который был автоматически отключен после установки .NET Reflector).
РЕДАКТИРОВАТЬ: Это означает, конечно, что это исключение происходило раньше, но когда параметр "Включить только мой код" отключен, помощник по отладке (если он включен) остановится на этом этапе, когда брошен.