【问题标题】:Add created class file to project将创建的类文件添加到项目
【发布时间】:2013-01-31 08:12:04
【问题描述】:

我有一个控制台应用程序,它从数据库为我构建了一些默认类。构建文件后,我希望能够刷新我的文件夹并在我的类库中查看新文件。

但是,无论我做什么,文件都不会显示,除非我进入并手动添加现有文件。 VS2010有没有办法查看文件夹并将该文件夹中的任何内容添加到项目中?例如:

文件夹 > File1.cs、File2.cs、File3.cs、File4.cs

VS2010 看到

文件夹 > File1.cs

如何让 VS2010 显示这些新类?

【问题讨论】:

    标签: c# visual-studio-2010


    【解决方案1】:

    您的问题是您只会看到 .csproj 文件中包含和引用的文件。总的来说,这是一件好事,因为它使您可以最终控制项目中考虑的内容或不考虑的内容。不过,这会给您带来问题,因为插入到您的项目目录中的创建文件没有被引用。正如您所提到的,您可以手动包含文件,但我知道您希望此过程是自动的。

    在我看来,解决此问题的最佳方法是使用设计时 T4 模板,而不是让项目创建文件。设计时 T4 模板是类似于 Razor 之前的 ASP.NET 视图的文件,允许在项目中生成代码。您可以访问您的数据库,格式化您的类,然后将 .cs 文件直接输出到您的项目中,而无需构建它。这非常方便,因为它使您可以根据输出捕获可能出现的编译时错误,而无需进行完整的构建。

    More information about using T4 can be found here.

    And a good walkthrough can be found here.

    【讨论】:

    • 这并不能解决问题,因为我可能会创建一个全新的数据库,然后在其上运行此应用程序并从中创建“N”个类。所以我可以在 30 秒到 1 分钟的运行时间内根据我的数据库创建 50、100、1000 个类。
    • 虽然我的最后一条评论有点极端,有 1000 个课程,但这是可能的,而且我已经在做每个手动操作。
    • 恐怕我看不出 T4 与创建你的类有什么冲突,但无论如何,如果它真的不是一个选项,你可以用你的程序编辑你的 csproj 文件,如果您无需调试即可运行它。我只是在这里猜测,但我想它与在运行生成的可执行文件时使用记事本编辑 csproj 具有相同的效果。您可以考虑修改 csproj 以在创建文件后包含您生成的文件。不过,我仍然认为 T4(甚至是 NuGet 包)是一个更好的选择,如果你能让它工作的话。
    【解决方案2】:

    没有亲自尝试过,但是你应该可以使用它来做到这一点..

    首先使用您的应用解决方案获得对您项目的引用,然后使用 Visual Studio 自动化框架 (DTE):

    ProjectItems p = Project.ProjectItems;
    p.AddFromFile("File1.cs");
    

    取自:http://msdn.microsoft.com/en-us/library/envdte.projectitems.addfromfile.aspx 我会进一步阅读它。

    【讨论】:

      【解决方案3】:
      1. 选择可以找到文件的项目
      2. 在解决方案资源管理器顶部,您可以选择“显示所有文件”
      3. 选择您的文件并包含

      可以通过修改项目的 .csproj/vbproj 文件从另一个应用程序或脚本中自动添加它们

          <Compile Include="My Project\MyClass.vb" />
      

      这必须在正确的项目组中完成。

      【讨论】:

      • 这仍然是手动操作,对吗?可以自动完成吗?
      • 如果您正在运行应用程序,这是不可能的,您必须编辑您的 vbProj 文件并在正确的项目组中添加:跨度>
      【解决方案4】:

      我认为这不是直接可能的。你可以写一个template file (t4)来创建你的cs文件,当转换文件运行时它们将被添加到项目中。

      为了在构建之后/之前运行转换文件,您可以编写一个构建前/构建后事件。

      【讨论】:

        【解决方案5】:

        这需要你创建一个 VS 插件。你可以找到一个例子here...

        【讨论】:

          【解决方案6】:

          好的,我有一个控制台应用程序,它正在从数据库中为我构建一些默认类。

          你不能让这个应用程序在一个文件中写入所有类,比如Proxy.csEntities.cs。然后每次重新生成文件并重新构建项目时,您都可以访问新的类。

          【讨论】:

          • 是的,一旦添加了文件就可以了,但问题是我可能要添加 50 个之前未添加的新类,而不是手动添加每个类,我希望 VS 选择它飞起来
          • @CBRRacer 我说:在一个文件中生成所有类。或者甚至可以让它生成一个解决方案和类,这样你就可以引用这个解决方案了。
          • 这会起作用,但这不是我正在寻找的解决方案。我希望每个类都在它自己的类文件中。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-06
          • 1970-01-01
          • 2011-05-18
          相关资源
          最近更新 更多