invalid value on MacroPhase position
От: 190R Россия http://gritsenko.biz
Дата: 05.09.09 21:07
Оценка:
Компилятор выдает ошибку

Error    7    invalid value on MacroPhase position: Nemerle.MacroPhase.BeforeInheritance    C:\Program Files\Nemerle\Nemerle.MSBuild.targets    172    10


при компиляции макроса:

    [MacroUsage(MacroPhase.BeforeInheritance, MacroTargets.Parameter,
                Inherited = true, AllowMultiple = false)]
    macro NotNull(_ : TypeBuilder, m : ParsedMethod, p : ParsedParameter)
    {
      Message.Hint($"Тип параметра m: $(m.GetType()) - '$m'");
      Message.Hint($"Тип параметра p: $(p.GetType()) - '$p'");
    }



Установлена декабрьская сборка интеграции 8198 с сайта nemerle.org

Не могу понять в чем может быть причина ошибки.. и офф сайт не открывается к тому же


содержимое файла C:\Program Files\Nemerle\Nemerle.MSBuild.targets :

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

     <!-- <UsingTask
      TaskName="Nemerle.Tools.MSBuildTask.CreateNemerleManifestResourceName"
      AssemblyFile="Nemerle.MSBuild.Tasks.dll"/> -->

    <UsingTask
      TaskName="CreateCSharpManifestResourceName"
      AssemblyName="Microsoft.Build.Tasks, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

    <UsingTask
      TaskName="Nemerle.Tools.MSBuildTask.Ncc"
      AssemblyFile="$(Nemerle)\Nemerle.MSBuild.Tasks.dll"/>

    <PropertyGroup>
        <MSBuildAllProjects>$(MSBuildAllProjects);$(Nemerle)\Nemerle.MSBuild.targets</MSBuildAllProjects>
        <DefaultLanguageSourceExtension>.n</DefaultLanguageSourceExtension>
        <Language>Nemerle</Language>
    </PropertyGroup>

    <!--
    The CreateManifestResourceNames target create the manifest resource names
    from the .RESX files.

        [IN]
        @(ResxWithNoCulture) - The names the non-culture .RESX files.
        @(ResxWithCulture) - The names the culture .RESX files.
        @(NonResxWithNoCulture) - The names of the non-culture non-RESX
                                  files (like bitmaps, etc).

        @(NonResxWithCulture) - The names of the culture non-RESX
                               files (like bitmaps, etc).

        [OUT]
        @(ManifestResourceWithNoCultureName) - The corresponding manifest
                                               resource name (.RESOURCE)

        @(ManifestResourceWithCultureName) - The corresponding manifest
                                             resource name (.RESOURCE)

        @(ManifestNonResxWithNoCulture) - The corresponding manifest
                                          resource name.

        @(ManifestNonResxWithCulture) - The corresponding manifest
                                       resource name.

    For Nemerle applications the transformation is like:

        Resources1.resx => RootNamespace.Resources1 => Build into main assembly

        SubFolder\Resources1.resx =>
            RootNamespace.SubFolder.Resources1 =>
                Build into main assembly

        Resources1.fr.resx =>
            RootNamespace.Resources1.fr =>
                Build into satellite assembly

        Resources1.notaculture.resx =>
            RootNamespace.Resources1.notaculture =>
                Build into main assembly

    For other project systems, this transformation may be different.
    -->

    <PropertyGroup>
        <CreateManifestResourceNamesDependsOn>
        </CreateManifestResourceNamesDependsOn>
    </PropertyGroup>
    <Target
        Name="CreateManifestResourceNames"
        Condition="'
            @(ResxWithNoCulture)
            @(ResxWithCulture)
            @(NonResxWithNoCulture)
            @(NonResxWithCulture)'!=''"

        DependsOnTargets="$(CreateManifestResourceNamesDependsOn)"
        >

        <!-- Create the target resource names for non-culture resx files.
        <CreateNemerleManifestResourceName
            Condition="'@(ResxWithNoCulture)'!=''"
            ResourceFiles="@(ResxWithNoCulture)"
            RootNamespace="$(RootNamespace)">

            <Output
                TaskParameter="ManifestResourceNames"
                ItemName="ManifestResourceWithNoCultureName"/>

        </CreateCSharpManifestResourceName>-->

        <!-- Create the target resource names for culture resx files.
        <CreateCSharpManifestResourceName
            Condition="'@(ResxWithCulture)'!=''"
            ResourceFiles="@(ResxWithCulture)"
            RootNamespace="$(RootNamespace)">

            <Output
                TaskParameter="ManifestResourceNames"
                ItemName="ManifestResourceWithCultureName"/>

        </CreateCSharpManifestResourceName>-->

        <!--
        Create the target resource names for non-culture non-resx files. -->

        <CreateCSharpManifestResourceName
            Condition="'@(NonResxWithNoCulture)'!=''"
            ResourceFiles="@(NonResxWithNoCulture)"
            RootNamespace="$(RootNamespace)">

            <Output
                TaskParameter="ManifestResourceNames"
                ItemName="ManifestNonResxWithNoCulture"/>

        </CreateCSharpManifestResourceName>

        <!-- Create the target resource names for culture non-resx files.
        <CreateCSharpManifestResourceName
            Condition="'@(NonResxWithCulture)'!=''"
            ResourceFiles="@(NonResxWithCulture)"
            RootNamespace="$(RootNamespace)">

            <Output
                TaskParameter="ManifestResourceNames"
                ItemName="ManifestNonResxWithCulture"/>

        </CreateCSharpManifestResourceName>-->
    </Target>

    <PropertyGroup>

        <!-- "None" is not technically a valid DebugType, so we can't pass it in as such
             to the compiler.  So here, we modify the properties so they make sense. -->
        <DebugSymbols Condition=" '$(DebugType)' == 'none' ">false</DebugSymbols>
        <DebugType    Condition=" '$(DebugType)' == 'none' "></DebugType>

        <_DisabledWarnings>$(NoWarn)</_DisabledWarnings>

        <!-- Provide a facility to override UseHostCompilerIfAvailable-->
        <UseHostCompilerIfAvailable Condition=" '$(UseHostCompilerIfAvailable)' == ''">true</UseHostCompilerIfAvailable>

    </PropertyGroup>


    <ItemGroup>
        <DocFileItem Include="$(DocumentationFile)" Condition="'$(DocumentationFile)'!=''"/>
    </ItemGroup>

    <PropertyGroup>
        <CoreCompileDependsOn>_ComputeNonExistentFileProperty</CoreCompileDependsOn>
    </PropertyGroup>
    <Target
        Name="CoreCompile"
        Inputs="$(MSBuildAllProjects);
                @(Compile);
                @(ManifestResourceWithNoCulture);
                $(ApplicationIcon);
                $(AssemblyOriginatorKeyFile);
                @(ManifestNonResxWithNoCultureOnDisk);
                @(ReferencePath);
                @(CompiledLicenseFile);
                @(EmbeddedDocumentation);
                @(CustomAdditionalCompileInputs)"
        Outputs="@(DocFileItem);
                 @(IntermediateAssembly);
                 @(CustomAdditionalCompileOutputs)"
        DependsOnTargets="$(CoreCompileDependsOn)"
    >

        <Ncc
              AdditionalLibPaths="$(AdditionalLibPaths)"
              DefineConstants="$(DefineConstants)"
              DisabledWarnings="$(_DisabledWarnings)"
              EnabledWarnings="$(EnabledWarnings)"
              DocumentationFile="@(DocFileItem)"
              EmitDebugInformation="$(DebugSymbols)"
              KeyFile="$(KeyOriginatorFile)"
              NoLogo="$(NoLogo)"
              NoStdLib="$(NoStdLib)"
              NoStdMacros="$(NoStdMacros)"
              GreedyReferences="$(GreedyReferences)"
              Optimize="$(Optimize)"
              OutputAssembly="@(IntermediateAssembly)"
              References="@(ReferencePath)"
              Resources="@(ManifestResourceWithNoCulture);@(ManifestNonResxWithNoCultureOnDisk);@(CompiledLicenseFile)"
              ResponseFiles="$(CompilerResponseFile)"
              Sources="@(Compile)"
              TargetType="$(OutputType)"
              ToolPath="$(CscToolPath)"
              TreatWarningsAsErrors="$(TreatWarningsAsErrors)"
              WarningLevel="$(WarningLevel)"
              WarningsAsErrors="$(WarningsAsErrors)"
              />

    </Target>

    <Import Project="$(MSBuildBinPath)\Microsoft.Common.targets" />
</Project>

<!--
              AddModules="@(AddModules)"
              AllowUnsafeBlocks="$(AllowUnsafeBlocks)"
              BaseAddress="$(BaseAddress)"
              CheckForOverflowUnderflow="$(CheckForOverflowUnderflow)"
              CodePage="$(CodePage)"
              DebugType="$(DebugType)"
              DelaySign="$(DelaySign)"
              ErrorReport="$(ErrorReport)"
              FileAlignment="$(FileAlignment)"
              GenerateFullPaths="$(GenerateFullPaths)"
              KeyContainer="$(KeyContainerName)"
              LangVersion="$(LangVersion)"
              MainEntryPoint="$(StartupObject)"
              ModuleAssemblyName="$(ModuleAssemblyName)"
              NoConfig="true"
              PdbFile="$(PdbFile)"
              Platform="$(PlatformTarget)"
              UseHostCompilerIfAvailable="$(UseHostCompilerIfAvailable)"
              Utf8Output="$(Utf8Output)"
              WarningsNotAsErrors="$(WarningsNotAsErrors)"
              Win32Icon="$(ApplicationIcon)"
              Win32Resource="$(Win32Resource)"
-->
Re: invalid value on MacroPhase position
От: Иванков Дмитрий Россия  
Дата: 05.09.09 22:08
Оценка: 3 (1)
Здравствуйте, 190R, Вы писали:

R>Компилятор выдает ошибку


R>
R>Error    7    invalid value on MacroPhase position: Nemerle.MacroPhase.BeforeInheritance    C:\Program Files\Nemerle\Nemerle.MSBuild.targets    172    10
R>


R>при компиляции макроса:


R>
R>    [MacroUsage(MacroPhase.BeforeInheritance, MacroTargets.Parameter,
R>                Inherited = true, AllowMultiple = false)]
R>    macro NotNull(_ : TypeBuilder, m : ParsedMethod, p : ParsedParameter)
R>    {
R>      Message.Hint($"Тип параметра m: $(m.GetType()) - '$m'");
R>      Message.Hint($"Тип параметра p: $(p.GetType()) - '$p'");
R>    }
R>


Не помню было ли так нужно всегда, но не хватает using Nemerle (для MacroPhase) и using Nemerle.Compiler (для Message).
По крайне мере в r8327 этого хватает, если в r8198 не поможет, то посмотрю в ней.
Re[2]: invalid value on MacroPhase position
От: 190R Россия http://gritsenko.biz
Дата: 06.09.09 06:17
Оценка:
Здравствуйте, Иванков Дмитрий, Вы писали:

ИД>Не помню было ли так нужно всегда, но не хватает using Nemerle (для MacroPhase) и using Nemerle.Compiler (для Message).

ИД>По крайне мере в r8327 этого хватает, если в r8198 не поможет, то посмотрю в ней.


О! Сработало! Спасибо

просто при создании проекта макроса автоматически было прописано только using Nemerle.Compiler, и меня смутило то, ГДЕ компилятор искал ошибку..
Re: AdvancedHints Beta
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.09.09 14:29
Оценка:
Здравствуйте, 190R, Вы писали:

R>Компилятор выдает ошибку


R>
R>Error    7    invalid value on MacroPhase position: Nemerle.MacroPhase.BeforeInheritance    C:\Program Files\Nemerle\Nemerle.MSBuild.targets    172    10
R>


Открой пространство имен Nemerle или дабавь его к именам (Nemerle.MacroPhase.BeforeInheritans).
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: AdvancedHints Beta
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.09.09 14:56
Оценка:
Здравствуйте, 190R, Вы писали:

R>О! Сработало! Спасибо


R>просто при создании проекта макроса автоматически было прописано только using Nemerle.Compiler, и меня смутило то, ГДЕ компилятор искал ошибку..


Там элементарная халтура. Тому кто писал разбор атрибутов макросов было лень делать все как следует и он воспользовался механизмом свертки констант и ручным распознованием. Там даже есть комент "// FIXME: we should really operate on typed attributes

Надо просто переписать этот кусок и сообщения станут более внятными.

Плюс, в шаблоне проекта макро-сборки, в файл, нужно добавит "using Nemerle;".
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: AdvancedHints Beta
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.09.09 15:59
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Плюс, в шаблоне проекта макро-сборки, в файл, нужно добавит "using Nemerle;".


Добавил в ревизии 8328.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.