【问题标题】:Visual studio post build events -- doing them in a project instead of the event dialogVisual Studio 发布构建事件——在项目而不是事件对话框中执行它们
【发布时间】:2010-08-25 14:20:10
【问题描述】:

所以我最近一直在做的事情是在我的代码解决方案中添加一个额外的项目,并在其中以编程方式完成我的后期构建工作。此项目最后构建,然后自行启动。

我可以在那里做的很酷的事情是运行我创建的 ILMerge 自动化类,如果我只是给它一个项目文件夹、在我的程序集信息中增加版本号、将文件复制到我想要的任何位置等等等等,它就会自动执行合并。在我看来,这里的可能性是无穷无尽的。

我现在正在使用的一个示例——我有一个相当大的框架库,我将与我们的一个应用程序一起部署它,但我们不想单独包含所有 dll(有20个)。此外,对于这个应用程序,我不需要库中的每个类,所以修剪它是有意义的。在图书馆的后期构建项目中,我正在这样做......

outputDirectory = new DirectoryInfo(@"...postbuildmerges\output");
solutionDirectory = new DirectoryInfo(@"...mainSolutionDirectory");

#region Web Lib
List<string> webLibraryNames = new List<string>
{
    "Lib.Configuration",
    "Lib.Web",
    "Lib.Data",
    "Lib.Utilities",
    "Lib.Threading"
};
List<string> AllNeededAssemblies = new List<string>();
webLibraryNames.ForEach((libname) => 
    {
        foreach (string assembly in GetLibraryAssemblies(libname))
            if (AllNeededAssemblies.Exists((assemblyName) => Path.GetFileName(assemblyName) == Path.GetFileName(assembly)) == false)
                AllNeededAssemblies.Add(assembly);
    });

SharpMergeAutomator.Merge(
    @"...path to primary assembly...",
    AllNeededAssemblies.ToArray(),
    "...desired output file...",
    //merges xml documentation
    true);
#endregion

那么这个后期构建项目是一个好方法吗?它是不必要的复杂吗?有没有更好的办法?人们通常会做这样的事情吗?

【问题讨论】:

    标签: c# .net visual-studio build-process


    【解决方案1】:

    MSBuild 是用于构建的脚本语言,它能够轻松迭代文件夹树,针对您喜欢的任何文件过滤器等提交操作。您应该在我假设的 MSBuild 脚本中执行这些操作,因为当一个新的 .net出来后,它很可能仍然是构建的脚本语言,并且您不必更改构建脚本以使用新的 .net,而您在这样的代码中执行的构建工作越多,您的代码就越多。随着文件和东西的移动,我必须重写。再加上 MSBuild,默认情况下您会获得日志记录以及大量内置内容。

    此外,还有许多社区任务可以轻松用于 ILMerge 之类的事情: http://code.google.com/p/ilmerge-tasks/wiki/HowToUse

    【讨论】:

    • 这是正确的方法,尽管 MSBuild XML 的手写有一些学习曲线。值得注意的是,VS prohect 属性中的构建前和构建后事件只是填充了适当的构建脚本元素。
    • 我喜欢用 csharp 编写这些事件的想法。如果有一个很棒的库可用于创建这些构建后事件,你们中的任何一个人都认为这是一个好主意吗?
    猜你喜欢
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多