MSBuild зависает навсегда, когда Фоди записывает сборку

В моем решении многие проекты используют Fody для внедрения ткача PropertyChanged. К сожалению, в конце сборки, когда Fody начинает писать финальную сборку, процесс зависает и не может быть восстановлен.

Это команда MSBuild, которую я выполняю:

set msbuildemitsolution=1
msbuild MyCompany.App.sln /t:Build /fl /flp:logfile=buildoutput.txt;verbosity=diagnostic /p:Configuration=Debug /p:Platform="Any CPU" /p:UseSharedCompilation=false

Это лог сборки:

AfterCompile:
   Beginning transformation.   
   Transformation succeeded 
FodyTarget:
    Fody: Fody (version 3.0.3.0) Executing
    Fody: ProjectDirectory: 'C:\Dev\Client\MyCompany.App.Client.Shell\'.
    Fody: AssemblyPath: 'C:\Dev\Client\MyCompany.App.Client.Shell\obj\Debug\MyCompany.App.Client.Shell.exe'
    Fody: Found path to weavers file 'C:\Dev\Client\MyCompany.App.Client.Shell\FodyWeavers.xml'.
    Fody: SolutionDirectory path is 'C:\Dev\'
    Fody: Finding weavers
    Fody: FindAddinDirectories:
    Fody:   No PackageDefinitions
    Fody:   Scanning SolutionDir/Packages convention: C:\Dev\packages'.
    Fody:     Fody weaver file added 'C:\Dev\packages\PropertyChanged.Fody.2.5.4\netclassicweaver\PropertyChanged.Fody.dll'
    Fody:   Skipped directory from Nuget Config since it could not be derived.
    Fody:   Scanning the MsBuildThisFileDirectory parent: C:\Dev\'.
    Fody:   Skipped scanning 'C:\Dev\Tools' since it doesn't exist.
    Fody:   Skipped NuGetPackageRoot since it is not defined.
    Fody: No Weaver project file found.
    Fody: Finished finding weavers 25ms
    Fody: Creating a new AssemblyLoadContext
    Fody: Reference count=209
    Fody: References:   *follows long list of references...*
    Fody: Found debug symbols at 'C:\Dev\Client\MyCompany.App.Client.Shell\obj\Debug\MyCompany.App.Client.Shell.pdb'.
    Fody: Weaver 'C:\Dev\packages\PropertyChanged.Fody.2.5.4\netclassicweaver\PropertyChanged.Fody.dll'.
    Fody:   Initializing weaver
    Fody:   Loading 'C:\Dev\packages\PropertyChanged.Fody.2.5.4\netclassicweaver\PropertyChanged.Fody.dll' from disk.
    Fody: Can't find 'FSharp.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
    Fody: Can't find 'System.Diagnostics.Tracing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
    Fody: Can't find 'System.IO.Compression, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
    Fody: Can't find 'System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
    Fody: Can't find 'System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
    Fody: Can't find 'System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
      Fody/PropertyChanged:   Executing Weaver
      Fody/PropertyChanged:     MyCompany.App.Client.Shell.ViewModels.SplashScreenViewModel
      Fody/PropertyChanged:             Model
      Fody/PropertyChanged:                     Model skipped since call already exists
      Fody/PropertyChanged:     MyCompany.App.Client.Shell.Model.ShellWindowModel
      Fody/PropertyChanged:             ProgramProvider
      Fody/PropertyChanged:                     ProgramProvider
      Fody/PropertyChanged:             UiEnabledContext
      Fody/PropertyChanged:                     UiEnabledContext
      Fody/PropertyChanged:             SizingContext
      Fody/PropertyChanged:                     SizingContext
      Fody/PropertyChanged:             ProgramHeaderRegionVisibility
      Fody/PropertyChanged:                     ProgramHeaderRegionVisibility
      Fody/PropertyChanged:             EnvironmentVersion
      Fody/PropertyChanged:                     EnvironmentVersion
      Fody/PropertyChanged:             EnvironmentVersionFontFamily
      Fody/PropertyChanged:                     EnvironmentVersionFontFamily
      Fody/PropertyChanged:             EnvironmentVersionFontColor
      Fody/PropertyChanged:                     EnvironmentVersionFontColor
      Fody/PropertyChanged:             EnvironmentVersionFontSize
      Fody/PropertyChanged:                     EnvironmentVersionFontSize
      Fody/PropertyChanged:             Title
      Fody/PropertyChanged:                     Title
      Fody/PropertyChanged:             RibbonSelectedIndex
      Fody/PropertyChanged:                     RibbonSelectedIndex
      Fody/PropertyChanged:             IsBusy
      Fody/PropertyChanged:                     IsBusy
      Fody/PropertyChanged:             IsTaskButtonsBusy
      Fody/PropertyChanged:                     IsTaskButtonsBusy
      Fody/PropertyChanged:             ShellContext
      Fody/PropertyChanged:                     ShellContext
      Fody/PropertyChanged:             ConsoleEditingContext
      Fody/PropertyChanged:                     ConsoleEditingContext
      Fody/PropertyChanged:             Icon
      Fody/PropertyChanged:                     Icon
      Fody/PropertyChanged:             IsOptionNavigationEnabled
      Fody/PropertyChanged:                     IsOptionNavigationEnabled
      Fody/PropertyChanged:     MyCompany.App.Client.Shell.Model.SplashScreenModel
      Fody/PropertyChanged:             LoadingMessages
      Fody/PropertyChanged:                     LoadingMessages
      Fody/PropertyChanged:             SelectedMessageIndex
      Fody/PropertyChanged:                     SelectedMessageIndex
      Fody/PropertyChanged:             NameVersion
      Fody/PropertyChanged:                     NameVersion
      Fody/PropertyChanged:             Environment
      Fody/PropertyChanged:                     Environment
      Fody/PropertyChanged:             EnvironmentColor
      Fody/PropertyChanged:                     EnvironmentColor
      Fody/PropertyChanged:     MyCompany.App.Client.Shell.ViewModels.ShellWindowViewModel
      Fody/PropertyChanged:             Model
      Fody/PropertyChanged:                     Model
      Fody/PropertyChanged:     MyCompany.App.Client.Shell.Model.ShellContext
      Fody/PropertyChanged:             IsInConsoleMode
      Fody/PropertyChanged:                     IsInConsoleMode
      Fody/PropertyChanged:   Finished 'PropertyChanged' in 162ms
      Fody/PropertyChanged:     Removing reference to 'PropertyChanged'.
    Fody:   Adding weaving info
    Fody:   Finished in 5ms
    Fody:   Writing assembly to 'C:\Dev\Client\MyCompany.App.Client.Shell\obj\Debug\MyCompany.App.Client.Shell.exe'.

В этом состоянии он зависнет навсегда, если я попытаюсь отменить сборку с помощью CTRL-C, я получу это сообщение:

Attempting to cancel the build... 
warning MSB4220: Waiting for the currently executing task "Fody.WeavingTask" to cancel.

Процесс будет безуспешно пытаться отменить сборку каждые 10 секунд или около того. Задача MSBuild становится неубиваемой, и мне нужно перезагрузить машину, чтобы попытаться запустить другую сборку!

В проекте используется следующее:

  • Фоди.3.0.3
  • PropertyChanged.Fody.2.4.0

Я использую версию msbuild 16.4.0.56107.

Пробовал обновить до последней версии Fody, не помогло.

Я знаю, что это может быть долгий путь; если у кого-то есть какие-либо советы/идеи о том, как исследовать это, поделитесь ими. Спасибо.

-- РЕДАКТИРОВАТЬ -- Если я удалю PropertyChanged и Fody из неудачного проекта, решение сможет завершить сборку. Что может заставить Фоди повеситься?


person ab_732    schedule 05.01.2020    source источник
comment
Имея эту проблему, не в состоянии решить любыми средствами. У кого-нибудь есть прорыв?   -  person Vishal Bhatt    schedule 21.04.2020
comment
Из любопытства... нет ли у вас файла без расширения в корне жесткого диска? Найдите что-то вроде C:\Program или c:\Progra~1   -  person ab_732    schedule 21.04.2020
comment
Нет, у меня нет такого файла.   -  person Vishal Bhatt    schedule 23.04.2020


Ответы (2)


К сожалению, я не смог изолировать проблему; учитывая, что Fody работал не только над одним из наших проектов, я заменил Fody и PropertyChanged реализацией .Net, предоставленной классом BindableBase

    private string title;
    public string Title 
    { 
        get => title;
        set => SetProperty(ref title, value);
    }

Не уверен, что это может помочь, однако мы заметили, что некоторые помехи могут исходить от файла без расширения в корне жесткого диска. Найдите что-то вроде c:\Progra~1 или c:\Program и переименуйте или удалите его.

person ab_732    schedule 17.01.2020

Очень вероятно, что это вызвано использованием последних компиляторов с полностью устаревшей версией Fody - Fody (через Mono.Cecil), вероятно, просто не справляется с сгенерированным IL.

person tom-englert    schedule 23.04.2020
comment
В моем случае я также пытался обновить Fody до последней версии - безуспешно. - person ab_732; 23.04.2020