Error during the compilation in VisualStudio's msbuild.exe #961

Open
opened 2024-10-08 04:20:03 -05:00 by alexkr403 · 0 comments
alexkr403 commented 2024-10-08 04:20:03 -05:00 (Migrated from github.com)

I try to use the library for Roslyn code generation purposes. The code inside the generator:

public Dictionary<string, string> Create()
{
    var stream = Assembly
        .GetAssembly(typeof(ParametersXmlParser))
        .GetManifestResourceStream("Compatibility_Assembly");

    var module = ModuleDefinition.ReadModule(stream);

    var tagType = module.GetType("Compatibility.Enumerations.Tag");
    var derivedFromAttributeType =
        module.GetType("Compatibility.Attributes.ParameterDerivedFromAttribute");

    var valueToNameLookup = tagType
        .Fields
        .Where(f => f.Name != "value__")
        .ToDictionary(f => (int)f.Constant, f => f.Name);

    var result = new Dictionary<string, string>();

    foreach (var field in tagType.Fields)
    {
        if (field.Name == "value__")
        {
            continue;
        }

        if (field.HasCustomAttributes)
        {
            var derivedFrom = field.Name;

            var derivedFromAttribute = field.CustomAttributes.FirstOrDefault(attribute =>
                attribute.AttributeType.Resolve() == derivedFromAttributeType);
 ....
        }
    }

    return ...

There is an error during the compilation in Visual Studio or in pwsh via the command "./MSBuild.exe --restore "D:\source\projectName.csproj"" on the line "attribute.AttributeType.Resolve()"

Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'
2> at Mono.Cecil.BaseAssemblyResolver.Resolve(AssemblyNameReference name, ReaderParameters parameters) in C:\sources\cecil\Mono.Cecil\BaseAssemblyResolver.cs:line 172
2> at Mono.Cecil.DefaultAssemblyResolver.Resolve(AssemblyNameReference name) in C:\sources\cecil\Mono.Cecil\DefaultAssemblyResolver.cs:line 33
2> at Mono.Cecil.MetadataResolver.Resolve(TypeReference type) in C:\sources\cecil\Mono.Cecil\MetadataResolver.cs:line 111
2> at Mono.Cecil.TypeReference.Resolve() in C:\sources\cecil\Mono.Cecil\TypeReference.cs:line 278
2> at CodeGenerator.Parameters.Parser.ParametersXmlParser.Create() in D:\source\code-generators\sources\CodeGenerator.Parameters\Parser\ParametersXmlParser.cs:line 84

Compilation via the command "dotnet build "D:\source\projectName.csproj"" works smoothly.
The most interesting is that despite the error during the compilation the generator itself works after the build of the solution is finished with error, if I click "re-run" to generate the code.

I try to use the library for Roslyn code generation purposes. The code inside the generator: ``` public Dictionary<string, string> Create() { var stream = Assembly .GetAssembly(typeof(ParametersXmlParser)) .GetManifestResourceStream("Compatibility_Assembly"); var module = ModuleDefinition.ReadModule(stream); var tagType = module.GetType("Compatibility.Enumerations.Tag"); var derivedFromAttributeType = module.GetType("Compatibility.Attributes.ParameterDerivedFromAttribute"); var valueToNameLookup = tagType .Fields .Where(f => f.Name != "value__") .ToDictionary(f => (int)f.Constant, f => f.Name); var result = new Dictionary<string, string>(); foreach (var field in tagType.Fields) { if (field.Name == "value__") { continue; } if (field.HasCustomAttributes) { var derivedFrom = field.Name; var derivedFromAttribute = field.CustomAttributes.FirstOrDefault(attribute => attribute.AttributeType.Resolve() == derivedFromAttributeType); .... } } return ... ``` There is an error during the compilation in Visual Studio or in pwsh via the command "./MSBuild.exe --restore "D:\source\projectName.csproj"" on the line "attribute.AttributeType.Resolve()" Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' 2> at Mono.Cecil.BaseAssemblyResolver.Resolve(AssemblyNameReference name, ReaderParameters parameters) in C:\sources\cecil\Mono.Cecil\BaseAssemblyResolver.cs:line 172 2> at Mono.Cecil.DefaultAssemblyResolver.Resolve(AssemblyNameReference name) in C:\sources\cecil\Mono.Cecil\DefaultAssemblyResolver.cs:line 33 2> at Mono.Cecil.MetadataResolver.Resolve(TypeReference type) in C:\sources\cecil\Mono.Cecil\MetadataResolver.cs:line 111 2> at Mono.Cecil.TypeReference.Resolve() in C:\sources\cecil\Mono.Cecil\TypeReference.cs:line 278 2> at CodeGenerator.Parameters.Parser.ParametersXmlParser.Create() in D:\source\code-generators\sources\CodeGenerator.Parameters\Parser\ParametersXmlParser.cs:line 84 Compilation via the command "dotnet build "D:\source\projectName.csproj"" works smoothly. The most interesting is that despite the error during the compilation the generator itself works after the build of the solution is finished with error, if I click "re-run" to generate the code.
Sign in to join this conversation.
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
gh-jbevain/cecil#961
No description provided.