Fody / PropertyChanged

Injects INotifyPropertyChanged code into properties at compile time
MIT License
1.88k stars 227 forks source link

Member is declared in another module #311

Open MaybeSacred opened 6 years ago

MaybeSacred commented 6 years ago

PropertyChanged fails with this exception when AddINotifyPropertyChangedInterface is added to a class containing a type from LanguageExt:

using PropertyChanged;
using LanguageExt;
namespace ConsoleApp1
{
    class Program
    {
        static void Main( string[] args )
        {
            var s = new Broke();
            s.MyVal = 0;
        }
        [ToString, AddINotifyPropertyChangedInterface]
        public class Broke
        {
            public Option<int> MyVal { get; set; }
        }
    }
}

However, ToString.Fody works fine; when the AddINotifyPropertyChangedInterface attribute is removed, the code compiles fine. The MCVE fails as well, with no ToString attribute/weaver.

Packages used: languageext.core: 2.1.32 propertychanged.fody: 2.2.5 tostring.fody: 1.9.2

Example.zip

Exception:
Error       Fody: An unhandled exception occurred:
Exception:
Member 'LanguageExt.Option`1' is declared in another module and needs to be imported
StackTrace:
   at Mono.Cecil.MetadataBuilder.LookupToken(IMetadataTokenProvider provider) in C:\projects\cecil\Mono.Cecil\AssemblyWriter.cs:line 2220
   at Mono.Cecil.SignatureWriter.WriteTypeSignature(TypeReference type) in C:\projects\cecil\Mono.Cecil\AssemblyWriter.cs:line 2728
   at Mono.Cecil.SignatureWriter.WriteMethodSignature(IMethodSignature method) in C:\projects\cecil\Mono.Cecil\AssemblyWriter.cs:line 2690
   at Mono.Cecil.MetadataBuilder.GetMemberRefSignature(MemberReference member) in C:\projects\cecil\Mono.Cecil\AssemblyWriter.cs:line 2107
   at Mono.Cecil.MetadataBuilder.CreateMemberRefRow(MemberReference member) in C:\projects\cecil\Mono.Cecil\AssemblyWriter.cs:line 1985
   at Mono.Cecil.MetadataBuilder.GetMemberRefToken(MemberReference member) in C:\projects\cecil\Mon
[ConsoleApp1.zip](https://github.com/Fody/PropertyChanged/files/1647341/ConsoleApp1.zip)
o.Cecil\AssemblyWriter.cs:line 1970
   at Mono.Cecil.MetadataBuilder.LookupToken(IMetadataTokenProvider provider) in C:\projects\cecil\Mono.Cecil\AssemblyWriter.cs:line 2231
   at Mono.Cecil.Cil.CodeWriter.WriteOperand(Instruction instruction) in C:\projects\cecil\Mono.Cecil.Cil\CodeWriter.cs:line 272
   at Mono.Cecil.Cil.CodeWriter.WriteInstructions() in C:\projects\cecil\Mono.Cecil.Cil\CodeWriter.cs:line 182
   at Mono.Cecil.Cil.CodeWriter.WriteResolvedMethodBody(MethodDefinition method) in C:\projects\cecil\Mono.Cecil.Cil\CodeWriter.cs:line 113
   at Mono.Cecil.Cil.CodeWriter.WriteMethodBody(MethodDefinition method) in C:\projects\cecil\Mono.Cecil.Cil\CodeWriter.cs:line 56
   at Mono.Cecil.MetadataBuilder.AddMethod(MethodDefinition method) in C:\projects\cecil\Mono.Cecil\AssemblyWriter.cs:line 1635
   at Mono.Cecil.MetadataBuilder.AddMethods(TypeDefinition type) in C:\projects\cecil\Mono.Cecil\AssemblyWriter.cs:line 1627
   at Mono.Cecil.MetadataBuilder.AddType(TypeDefinition type) in C:\projects\cecil\Mono.Cecil\AssemblyWriter.cs:line 1449
   at Mono.Cecil.MetadataBuilder.AddTypes() in C:\projects\cecil\Mono.Cecil\AssemblyWriter.cs:line 1420
   at Mono.Cecil.MetadataBuilder.BuildTypes() in C:\projects\cecil\Mono.Cecil\AssemblyWriter.cs:line 1274
   at Mono.Cecil.MetadataBuilder.BuildModule() in C:\projects\cecil\Mono.Cecil\AssemblyWriter.cs:line 1038
   at Mono.Cecil.MetadataBuilder.BuildMetadata() in C:\projects\cecil\Mono.Cecil\AssemblyWriter.cs:line 1008
   at Mono.Cecil.ModuleWriter.<>c.<BuildMetadata>b__2_0(MetadataBuilder builder, MetadataReader _) in C:\projects\cecil\Mono.Cecil\AssemblyWriter.cs:line 136
   at Mono.Cecil.ModuleDefinition.Read[TItem,TRet](TItem item, Func`3 read) in C:\projects\cecil\Mono.Cecil\ModuleDefinition.cs:line 949
   at Mono.Cecil.ModuleWriter.BuildMetadata(ModuleDefinition module, MetadataBuilder metadata) in C:\projects\cecil\Mono.Cecil\AssemblyWriter.cs:line 135
   at Mono.Cecil.ModuleWriter.Write(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters) in C:\projects\cecil\Mono.Cecil\AssemblyWriter.cs:line 115
   at Mono.Cecil.ModuleWriter.WriteModule(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters) in C:\projects\cecil\Mono.Cecil\AssemblyWriter.cs:line 79
   at Mono.Cecil.ModuleDefinition.Write(String fileName, WriterParameters parameters) in C:\projects\cecil\Mono.Cecil\ModuleDefinition.cs:line 1136
   at InnerWeaver.WriteModule() in C:\projects\fody\FodyIsolated\ModuleWriter.cs:line 20
   at InnerWeaver.Execute() in C:\projects\fody\FodyIsolated\InnerWeaver.cs:line 105
Source:
Mono.Cecil
TargetSite:
Mono.Cecil.MetadataToken LookupToken(Mono.Cecil.IMetadataTokenProvider)         
SimonCropp commented 6 years ago

please upload a minimal solution that reproduces the issue

BigHoss commented 3 weeks ago

@SimonCropp As there is a Zip file with code attached, why was this closed? Asking as i have the same issue

SimonCropp commented 3 weeks ago

@BigHoss it was 6 years ago so i dont really remember. but i suspect i missed the zip link

ltrzesniewski commented 1 week ago

I tried the repro as-is:

0>: Error  : Fody: An unhandled exception occurred:
Exception:
Could not load file or assembly 'propertychanged.fody.dll' or one of its dependencies. The system cannot find the file specified.
StackTrace:
   at System.Reflection.AssemblyName.nGetFileInformation(String s)
   at System.Reflection.AssemblyName.GetAssemblyName(String assemblyFile)
   at AssemblyVersionReader.GetAssemblyVersion(String path) in C:\projects\fody\Fody\AssemblyVersionReader.cs:line 11
   at System.Linq.EnumerableSorter`2.ComputeKeys(TElement[] elements, Int32 count)
   at System.Linq.EnumerableSorter`1.Sort(TElement[] elements, Int32 count)
   at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__1.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
   at Processor.FindAssemblyPath(String weaverName) in C:\projects\fody\Fody\WeaverAssemblyPathFinder.cs:line 6
   at Processor.ProcessConfig(WeaverEntry weaverConfig) in C:\projects\fody\Fody\InstanceLinker\WeaversConfiguredInstanceLinker.cs:line 25
   at Processor.ConfigureWhenWeaversFound() in C:\projects\fody\Fody\InstanceLinker\WeaversConfiguredInstanceLinker.cs:line 7
   at Processor.FindWeavers() in C:\projects\fody\Fody\Processor.cs:line 119
   at Processor.Inner() in C:\projects\fody\Fody\Processor.cs:line 90
   at Processor.Execute() in C:\projects\fody\Fody\Processor.cs:line 50
Source:
mscorlib
TargetSite:
System.Reflection.AssemblyName nGetFileInformation(System.String)
The system cannot find the file specified. (Exception from HRESULT: 0x80070002)

But after updating the weaver packages:

image

The project builds fine. It also builds fine when uncommenting <ToString/>. I then ran the project and made sure the PropertyChanged event works correctly.

=> I can't reproduce with a recent version

@BigHoss could you maybe provide another repro?