2

我当前的 WPF 项目之一有问题。该项目用于编译(和运行)就好了。然后,出于许可问题,我们决定从库中删除扩展 WPF 工具包。我使用了NumericUpDowns ( ShortUpDown, ... 而不是已弃用的) 所以我决定自己写。

我已经写了一个UserControl并且对此非常满意,但是当我用我的控件交换 UpDowns 时,我称之为MySpinner它停止工作:

  • 设计器不再显示我的窗口并显示错误消息:“设计视图无法正确显示,因为尚未构建一些自定义元素。” .

  • 我的项目不再构建,并带有大量错误消息,指出我所有使用的类都不位于它们的命名空间中(MySpinnerMySpinner可能是由于 XAML 未编译。

我项目中的所有内容都在我DeviceSimulator“导入”的命名空间中,就像con以下行一样:xmlns:con="clr-namespace:DeviceSimulator"在我的开头Window(之前完美运行)。

如果我键入<con:IntelliSense,甚至可以正确地向我显示命名空间中的每个类作为可能的完成。

我知道已经有很多关于看似相似主题的问题,但不同之处在于,在我的情况下,该项目没有构建。尽管有错误,但项目构建的问题是我遇到过几次的问题,但这里不是这种情况。

我尝试了针对其他问题提出的解决方案,例如重新启动、重建、清理或将编译目标从来Any CPU回更改,x86但没有任何效果(构建和重建不起作用,因为解决方案无法编译)。我正在使用的所有内容都本地驻留在我的项目文件夹中(当然除了来自 的默认命名空间定义schemas.microsoft.com...),没有额外的库或我包含的其他库,并且我不在任何类型的网络或服务器上工作。

这个问题出现在我使用 Express 版本的 Visual Studio 2013 和 2012 中。

4

5 回答 5

3

由于用户已经找到了解决问题的方法,这并不意味着是一个答案,而只是与这种情况相关的一些信息。

当您发现自己的解决方案中有数十个甚至数百个以前没有的错误时,您可以放心,它们大多是“红鲱鱼”,或错误/临时错误。发生这种情况是因为最近更改了某些内容并导致项目中出现一个或几个错误。

通常,其他项目引用了现在损坏的项目,因此任何引用损坏项目中的类的类现在也显示一个或多个错误......这些是错误的,或更准确地说,临时错误,当实际发生时会消失错误已修复,该项目再次构建。

这也可能发生在单个项目应用程序中,当一个类中的错误会导致引用损坏类的其他类显示错误,指出某个类不存在,而它显然存在。这有点像更改解决方案平台或解决方案配置时,除了在这种情况下,Visual Studio 会意识到这些错误本身并不是实际错误。

那么我们如何解决这些问题呢?一般来说,这很容易,因为通常是最后一个被编辑的东西导致了实际错误。即使不是这种情况,您也可以查看 Visual Studio 中的ProjectError List,通常出现最多的项目名称是出现错误的项目名称。

此外,您可以忽略很多错误,例如“在项目/命名空间 Y 中找不到 X 类”,因为您知道它们确实存在。追踪实际错误是最棘手的部分。

另一个有助于多项目应用程序的技巧是使用Build > Build XXX (ProjectName)选项而不是Build Solution选项来首先构建损坏的项目。您需要首先选择相关项目Solution Explorer。有时项目只需要按特定顺序构建,但使用该Build Solution选项有其自己的构建顺序,可能会有所不同。

问题作者最初在设计器中遇到的错误听起来他们实际上需要做的就是构建包含第一个项目的项目CustomControls,然后在该项目具有 dll 文件时构建其余项目。

我希望这可以帮助其他面临数百个错误的用户。

于 2013-11-07T14:22:43.090 回答
2

正如 Gusdor 在评论中建议的那样,通过从项目中删除每一条断线并重建它来解决问题。

因此,问题似乎是项目中的某种循环依赖项(UserControl > XAML > UserControl),它通过破坏依赖项然后构建一个部分来解决,以便之后可以重新插入依赖项,并且可以将项目作为一个整体进行编译。

我发布了这个答案,因为 Gusdor 似乎没有发布他的答案,我不希望这个问题看起来没有答案。

于 2013-12-17T06:47:31.967 回答
1

为了在 XAML 设计器中查看 XAML 代码,页面必须是正确的标记。不编译的代码隐藏应该被注释掉,这样你就可以构建你的项目。

当我们尝试将一个名为“BaseView”的类和一个 XAML 页面从其旧项目迁移到我们的新项目时,我们的项目中遇到了类似的问题。这些项目有不同的命名空间。我们移动的 XAML 页面继承了BaseView其代码隐藏中的类,而不是Page.

  1. 我们在解决方案资源管理器中执行了“添加现有项目”,然后将类和页面(将其代码隐藏文件)从旧项目拖放到新项目中,所有这些都来自Visual Studio 中新项目的解决方案资源管理器。(注意:后来我们发现我们应该在新项目中创建了一个新文件夹,而不是从旧项目中将包含代码的文件夹拖到新的,只是将旧代码复制并粘贴到新文件夹中)(详情关于我们如何达到这一点:https ://msdn.microsoft.com/en-us/library/879x19d1(v=vs.90).aspx )
  2. 我们更新了在类文件和 XAML 页面代码隐藏using中引用旧命名空间的命名空间和语句。BaseView
  3. 我们更新了 XAML 页面指令中的命名空间,该指令继承自我们的类文件: <v:BaseView x:Class="OurNamespace.View.PageClassName" ...向下到vmlns:v="clr-namespace:OurNamespace.View"....

即使在“构建解决方案”之后,我们发现它给出了可怕的“设计视图无法正确显示,因为某些自定义元素尚未构建”错误。将鼠标悬停在未驻留在<v:BaseView中的 XAML 标记时,我们遇到了错误,即使其命名空间已正确更新。BaseViewOurNamespaceBaseView

要解决该错误,请将类文件移动到根目录(移出 XAML 页面所在的文件夹),执行“构建解决方案”,然后将其移回文件夹,执行另一个“构建解决方案”,然后单击一个名为“启用项目代码”的按钮位于 XAML 设计器的底部,就在水平滚动条的左侧,我们终于让它识别类,最后 XAML 设计器活了起来——无论是按钮还是第二个版本,不确定哪个解决了它-如果我必须花钱的话,可能是按钮。

后来我们发现,如果我们从另一个工作站启动项目,我们仍然会遇到问题,如果我们尝试打开 XAML 页面,它会在“输出”选项卡中出现此错误:

C:\Users\<User>\AppData\Local\Microsoft\VisualStudio\12.0\Designer\ShadowCache\4olitigs.k2m\hj4ewy5v.g23\MyApplication.dll

Could not load file or assembly 'MyApplication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. This assembly was compiled for a different processor.

虽然在原来的工作站上很好,但在第二个工作站上却失败了。原来它是项目属性的构建选项卡中的平台目标。它需要设置为“任何 CPU”——至少在我们的例子中——以避免机器之间的差异。

于 2016-08-09T19:49:02.283 回答
1

只是为了将来参考,我的解决方案是我没有在 xmlns CLR 命名空间定义的末尾添加“;assembly=MyAssembly”。

于 2017-01-16T11:54:49.513 回答
0

对我来说,解决方案是将以下几行添加到项目文件中.csproj

<PropertyGroup>
    <RootNamespace>AssemblyName</RootNamespace>
    <AssemblyName>AssemblyName</AssemblyName>
</PropertyGroup>
于 2022-01-29T23:35:25.013 回答