强制文件刷新之前建立
我们有一个生成一些代码(的.cs),用于建设该项目文件的工具。强制文件刷新之前建立
编辑:这些文件都是一些局部类的另一半,所以在生成过程需要访问源。例如,无法将其编译到DLL中,然后设置构建顺序。
该工具在预生成步骤运行,但是文件仅在生成后的溶液,这意味着构建需要进行两次改变到输入后清除错误更新。
例子:
- 修改工具输入文件
- 运行构建
- 工具运行并更改源文件
- 构建失败
- 运行构建
- 工具运行和变化的源文件(但它不实际上改变,因为输入保持不变)
- 生成成功
任何想法,我们如何能与双构建做了,而且还让我们的工具从VS运行?
谢谢你们!
重构你的SOLN到2个项目:第一代的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();
}}}
我们不能这样做,因为生成的代码是分部类的一部分。 – 2010-03-30 23:37:57
这将是微不足道写一个VS宏,将执行你的工具,然后开始构建,所以你能整个过程只需一次按键即可完成,而且可以快速完成双重构建。
或者(或与上述相结合),你可以自定义的工具来执行您的工具(见工具 - >外部工具)的VS工具菜单中添加。然后在执行构建之前手动执行此自定义工具 - 这仍然是一个乏味的双重步骤,但比构建两次更快更简单。 (并且您可能会让您的工具在预构建步骤中运行,因此旧的双重构建方法仍然可以运行)。
另一个选项可能是编辑您的项目的MSBuild脚本,以便在构建过程的早期执行您的工具,以便在依赖性扫描期间获取对该文件的更改(因此只需要一个构建过程)。
这些都不是很好的解决方案,但希望它们能够为您提供一个可以接受的改进方案,并且可以帮助您改善目前的状况。
我有同样的问题,太多,但我们的工具不会更改往往足以让我试图修复它:) – 2010-03-30 04:30:19
我也有同样的问题。我将我的预生成事件移到构建顺序的早期项目的构建后事件中,并且工作正常。 – AndrewS 2013-10-17 01:03:50