Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 在生成之前强制重新加载文件_Visual Studio_Visual Studio 2010 - Fatal编程技术网

Visual studio 在生成之前强制重新加载文件

Visual studio 在生成之前强制重新加载文件,visual-studio,visual-studio-2010,Visual Studio,Visual Studio 2010,我们有一个工具,可以生成一些用于构建项目的代码(.cs)文件 编辑:这些文件是某些分部类的另一半,因此构建过程需要访问源代码。例如,不可能将其编译成DLL,然后设置构建顺序 该工具在预生成步骤中运行,但仅在生成之后才在解决方案中更新文件,这意味着需要执行两次生成以在更改输入后清除错误 例如: 修改刀具输入文件 运行构建 工具运行并更改源文件 构建失败 运行构建 该工具运行并更改源文件(但实际上并没有更改,因为输入保持不变) 构建成功 有什么想法我们可以摆脱双重构建,仍然让我们的工具从

我们有一个工具,可以生成一些用于构建项目的代码(.cs)文件

编辑:这些文件是某些分部类的另一半,因此构建过程需要访问源代码。例如,不可能将其编译成DLL,然后设置构建顺序

该工具在预生成步骤中运行,但仅在生成之后才在解决方案中更新文件,这意味着需要执行两次生成以在更改输入后清除错误

例如:

  • 修改刀具输入文件
  • 运行构建
    • 工具运行并更改源文件
  • 构建失败
  • 运行构建
    • 该工具运行并更改源文件(但实际上并没有更改,因为输入保持不变)
  • 构建成功
有什么想法我们可以摆脱双重构建,仍然让我们的工具从VS运行吗


谢谢大家

将soln重构为两个项目:第一代是cs文件,第二代使用它(作为dll)

第一个项目(称为Gen)有2个后期生成事件:1)运行工具并重新创建源文件,2)编译Gen’ed src文件以供第二个项目使用:

Gen.exe 
csc.exe /target:library Gened.cs
第二个项目(称为Use)引用dll并调用它

==Gen.cs

using System.IO;
namespace sm3
{class Gen
{static string bod = "public static int var = 46;";
 static string clas = "public class Gened {" + bod + "}";
 static string ns  = "namespace sm3 {" + clas + "}";
 static void Main(string[] args)
 {StreamWriter SW;
     SW = File.CreateText("Gened.cs");
     SW.WriteLine(ns);
     SW.Close();
    }}}
==Use.cs

using System;
namespace sm3
{class Use
    {static void Main(string[] args)
        {Gened g = new Gened();
         Console.Write(Gened.var.ToString());
         Console.ReadLine();
         }}}

编写一个VS宏来执行您的工具,然后启动一个构建,这样您就可以用一次按键来执行整个过程,这一点非常简单,比执行双构建更快

或者(或与上述工具结合使用),您可以将自定义工具添加到执行您的工具的VS工具菜单中(请参见工具->外部工具)。然后在执行构建之前手动执行这个定制工具——这仍然是一个乏味的两步,但是比构建两次要快得多,也容易得多。(并且您可能能够让您的工具在预构建步骤中运行,以便旧的双构建方法仍然有效)

另一个选项可能是编辑项目的MSBuild脚本,以便在生成过程的早期执行工具,以便在依赖项扫描期间拾取对文件的更改(因此只需要一个生成过程)


这些都不是很好的解决方案,但希望它们能为您提供一条线索,使您的当前状况得到可接受的改善。

如果有人在寻找,答案是“使用”和Powershell。使用csproj,您可以使用BeforeTargets=“PrepareForBuild”条件:



将在加载要编译的文件之前执行PrepareForBuild目标。有关预定义构建目标的更多详细信息,请参阅。

我也遇到过同样的问题,但我们的工具没有经常进行更改,因此我无法尝试修复它:)我也遇到了同样的问题。我在构建顺序的早期将我的预构建事件移动为项目的后构建事件,并且成功了。我们不能这样做,因为生成的代码是分部类的一部分。