- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想针对我的 XAML 资源字典运行自定义 EXE。假设我得到的这个 exe 将删除注释、空格和未使用的资源。原始 XAML 文件需要保持不变,但最终出现在 XAP 和 DLL 中的 XAML (silverlight) 和 BAML (wpf) 需要进行转换。它需要在我的计算机和构建服务器上运行。
我的问题是:运行这个 exe 的最简单和最可靠的方法是什么?
我的第一个想法是举办预建事件。但这必须适用于原始 XAML 文件。开发会变得相当痛苦。
当构建后事件运行时,我的资源已经编译到 dll 中。
我有哪些选择?
最佳答案
您应该将“exe”实现为 MSbuild 任务。
本质上,您构建了一个继承自 Microsoft.Build.Utilities.Task 类的 C# 类,并覆盖了 Execute() 方法。
有点像
public class CleanXAML : Task
{
}
然后您指定(在您的构建文件或您导入的外部 .tasks 文件中,任务名称和您刚刚构建的 DLL 的路径)
<UsingTask AssemblyFile="C:\customtasks\XamlTasks.dll"
TaskName="Rob.CustomTasks.Xaml.CleanXaml"/>
这使您能够像调用任何其他 MsBuild 任务一样调用它
<CleanXaml Source="$(PathtoOriginalXaml)"
Destination="$(SourceCodePath)\$(cleanXaml.xaml)" />
从那里您需要找出将其“注入(inject)”到您的构建过程中的最佳方法。根据您构建的方式(msbuild、vs2010、teambuild 或 teambuild 工作流),可以使用不同的方法来执行此操作。本质上,您需要在调用 CoreCompile 目标之前发生这种情况,并确保您的“输出 xaml”正确替换了 CSC.exe 所期望的内容。
搜索 MsBuild 任务以获取更多信息,或在此处提出任何问题。
我强烈推荐这种方法,而不是在 MSBuild 中使用 CallEXE 任务,b/c 这样 MSBuild 属性和项目将保留在上下文中,因此您只是从一个构建步骤移动到另一个构建步骤,而不是转移整个要做的事情转换,然后希望它继续工作。
关于wpf - 如何将 XAML 转换注入(inject)到我的构建中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4921629/
我是一名优秀的程序员,十分优秀!