Visual Studio Version 17.6.1使用(false?)错误

jjhzyzn0  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(169)

我正在做一个ASP.NET Blazor服务器项目,.NET 6(LTS)。在之前的VS 2022版本中(甚至在17.4.4到17.5.* 之前),一切都很好,但新的更新到17.6.1破坏了代码:项目将不再编译。我在不同的计算机和VS 2022版本中复制并测试了完全相同的代码。

看起来是这样的:第一个Bug是由MyParent=this创建的,它使父给予自己的示例作为参数提供给子对象。(这个技巧经常在例子中使用,在以前的版本中也是如此。)这将创建前两行错误(CS 0400和CS1503)。
当将子组件 Package 到 Package 器中时,这将创建CS 1662错误。
删除所有传入参数后,项目即可编译。

@*this compiles*@
<Wrapper>
    <Child></Child>
</Wrapper>

我还成功地在默认的Blazor服务器模板中重新创建了(两个)错误。

Parent.razor:

@page "/parent"
<h3>Parent</h3>

<div>
    <h6>This will create both bugs:</h6>
    <p>"namespace bug" (CS0400 and CS1503)</p>
    <p>"lambda expression bug"(CS1662)</p>
    <Wrapper>
        <Child MyParent=this></Child>
    </Wrapper>
    @*
    alt version (longer)
    <Wrapper Context="MyContext">
        <Child MyParent=this MyObj=MyContext.MyData></Child>
    </Wrapper>
    *@
</div>

@*
<!-- the followling block would create only the first bug (with two errors). to see this, comment out the block above.-->

<div>
    <h6>This will create only the first ("namespace") bug:</h6>
    <p>"namespace bug" (CS0400 and CS1503)</p>
    <Child MyParent=this></Child>
</div>
*@

@code {
    public string MyName { get; set; } = "I am the parent.";
}

Wrapper.razor:

@using VS17._6._1BUG_Test.Data;
<h3>Wrapper</h3>

@code {
    [Parameter]
    public RenderFragment<MyClass> ChildContent { get; set; }
}

Child.razor:

<h3>Child2</h3>

<h6>my text:</h6>
<p>
    @MyObj.ToString()
</p>
<h6>parent data:</h6>
<p>@MyParent.MyName</p>

@code {
    [Parameter]
    public object MyObj { get; set; }
    [Parameter]
    public Parent MyParent { get; set; }
}

MyClass.cs:

namespace VS17._6._1BUG_Test.Data
{
    public class MyClass
    {
        public object MyData { get; set; } = "default data";
    }
}

整个代码可以在Github上找到
我希望微软能及时修复bug。如果任何人有任何其他建议,也欢迎。如果这个问题持续下去,我可能会考虑将VS 2022降级到17.5,尽管这似乎是我的最后手段,也可能有点困难。即使是一个完整的重新安装到一个较早的版本,如果可能有点复杂,因为我不认为这可以很容易地完成与VS安装程序。

更新:

我注意到,VS-installer现在实际上提供了一个回滚到以前版本的选项。所以我犹豫是否要更新到17.6.2来测试它是否被修复了(然后我只能回滚到17.6.1),但我现在可能会回滚到17.5。

更新:

似乎在预览版17.7.0预览版1中,这个错误不再出现,尽管我在发行说明中没有找到具体的修复方法(没有搜索太深)。

70gysomp

70gysomp1#

我在使用Visual Studio时也遇到了同样的问题--我的代码在15.X上工作,在16.X上不工作。我设法追踪到一个带有泛型参数的razor基类:
ElementBase.razor

@typeparam TElementType where TElementType : Element

@code {
    [Parameter]
    public TElementType Model { get; set; } = default!;

    public void Foo()
    {
        // ...
    }

    public void Bar()
    {
        // ...
    }
}

因为这是一个基类,所以它没有定义任何标记--它定义的任何东西都会被子类覆盖。我把它改为一个普通的C#类,错误就消失了:

public abstract class ElementBase<TElementType> : ComponentBase
{
    [Parameter]
    public TElementType Model { get; set; } = default!;

    public void Foo()
    {
        // ...
    }

    public void Bar()
    {
        // ...
    }
}

相关问题