Visual Studio发布事件 - 在一个项目中而不是事件对话框中执行它们
问题描述:
最近我一直在做的事情是向我的代码解决方案中添加一个额外的项目,并以编程方式在其中编写后期构建。这个项目最后建立,然后启动。Visual Studio发布事件 - 在一个项目中而不是事件对话框中执行它们
很酷的东西我可以做的就是运行一个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
因此,这是生成后的项目件事的好方法吗?它是不是很复杂?有没有更好的办法?人们通常做这样的事情吗?
答
MSBuild是构建的脚本语言,它可以轻松地迭代文件夹树,针对您喜欢的任何文件过滤器提交操作等等。您应该在MSBuild脚本中执行这些操作,因为这会导致新操作。网出来,它很可能仍然是脚本语言的版本,你不会有改变构建脚本与新的.NET工作,而更多的建立你在这样的代码做的工作,这只是更多的代码你将不得不重写为文件和事物已经移动。加上MSBuild,默认情况下会随着大量内置的东西进行日志记录。
此外,还有大量的社会任务轻松使用的东西像ILMerge: http://code.google.com/p/ilmerge-tasks/wiki/HowToUse
这是正确的做法,尽管XML的MSBuild的手写有一个学习曲线的东西。值得注意的前和在VS prohect性质后生成事件只是填充approproate构建脚本元素。 – Richard 2010-08-25 15:06:06
我喜欢用csharp编写这些事件的想法。如果有可用于创建这些后生成事件一个真棒库,既可以的,你认为这是以往任何时候都好主意? – 2010-08-25 18:06:45