C#/。NET项目 - 我是否正确设置了?

时间:2010-04-21 21:48:03

标签: c# .net reference projects-and-solutions

第一个解决方案:\ Common \ Controls \ Controls.sln
    及其项目:\ Common \ Controls \ Common.Controls \ Common.Controls.csproj
    描述:这是一个包含此类的库:

public abstract class OurUserControl : UserControl
{
    // Variables and other getters/setters common to our UserControls
}

第二个解决方案:\ AControl \ AControl.sln
    及其项目:\ AControl \ AControl \ AControl.csproj
    描述:在许多表单/类中,它将包含此类:

using Common.Controls;

namespace AControl
{
    public partial class AControl : OurUserControl
    {
        // The implementation
    }
}

关于添加引用的说明(不确定这是否相关):

当我添加引用(对于我创建的项目)时,使用上面的名称:
   1.我将 Common.Controls.csproj 添加到 AControl.sln
   2.在 AControl.sln 中,我关闭 Common.Controls.csproj 的构建    3.我将对 Common.Controls 的引用(按项目)添加到 AControl.csproj

这是我知道如何使Debug版本与Debug References匹配的(最简单)方式,以及Release版本以匹配Release References。

现在,问题出在哪里(实际使用UserControl的第三个解决方案/项目):

第三个解决方案:\ MainProj \ MainProj.sln
    及其项目:\ MainProj \ MainProj \ MainProj.csproj
    描述:以下是其中一个类的示例函数:

private void TestMethod<T>()
    where T : Common.Controls.OurUserControl, new()
{
    T TheObject = new T();
    TheObject.OneOfTheSetters = something;
    TheObject.AnotherOfTheSetters = something_else;

    // Do stuff with the object
}

我们可能会这样称呼这个函数:

private void AnotherMethod()
{
    TestMethod<AControl.AControl>();
}

这构建,运行和工作。没问题。奇怪的是,在我关闭项目/解决方案并重新打开它之后,到处都是红色的波浪形。我提出了我的错误列表,我看到了大量错误(任何与AControl有关的事都会被记录为错误)。

我会看到如下错误:

  • 类型'AControl.AControl'不能在泛型类型或方法'MainProj.MainClass.TestMethod()'中用作类型参数'T'。没有从'AControl.AControl'到'Common.Controls.OurUserControl'的隐式引用转换。

或实际方法内部(位于抽象类中的属性):

  • 'AControl.AControl'不包含'OneOfTheSetters'的定义,并且没有扩展方法'OneOfTheSetters'接受类型'AControl.AControl'的第一个参数可以找到(你是否缺少using指令或汇编引用? )

与此同时,我仍然可以构建并运行该项目(然后红色波浪线消失,直到我重新打开项目,或关闭/重新打开文件)。在我看来,我可能会错误地设置项目。想法?

1 个答案:

答案 0 :(得分:1)

你不应该为你拥有的每个项目制定一个解决方案,但有一个解决方案包含多个项目(在你的情况下可能全部)。

您还可以制作包含重叠项目的多个解决方案。 例如。如果您经常只编辑核心库,请创建一个仅包含\ Common \ Controls \ Common.Controls \ Common.Controls.csproj项目的解决方案,并创建另一个包含所有三个项目以编辑其他两个项目。

这将为您提供迄今为止使用Visual Studio的最佳体验(您不再需要关心匹配调试/发布等)。