【问题标题】:How to deploy an MSBuild custom Task using MEF?如何使用 MEF 部署 MSBuild 自定义任务?
【发布时间】:2010-08-12 18:32:14
【问题描述】:

我有许多适用于 Visual Studio 2010 的自定义项和项目模板。 我已经构建了一个 VSIX 包,可用于将这些扩展部署到多个开发人员的机器上。

我现在正在创建新项目模板所需的自定义 MSBuild 任务。

在我的本地项目中,我可以通过在项目文件中放入硬编码路径来使其工作:

但这在 VSIX 包部署到“开发”Visual Studio 实例时不起作用。 Visual Studio 只是报告找不到 CustomBuildTask.dll。

VSIX 在哪里部署 DLL? 是否有一个 MSBuild %(path) 变量可以用来在其他机器上查找 DLL, 还是每个用户都必须手动复制 DLL 和/或将全局“.tasks”文件放入他们的 Visual Studio 安装中?

注意:MSBuild 任务没有像项和项目模板那样的 VSIX 内容类型。我尝试了“VS 包”、“MEF 组件”和“自定义扩展类型”,但似乎都没有。

【问题讨论】:

  • 在全盘搜索后,我在以下位置找到了我的 DLL:C:\Documents and Settings\\Local Settings\Application Data\Microsoft\Visual Studio\10.0Exp\Extensions\\\\MyCustomTask.dll 这似乎是 VSIX 部署 DLL 的位置,但我找不到要在 UsingTask AssemblyFile 属性中使用的 MSBuild 变量。

标签: visual-studio-2010 msbuild mef vsix


【解决方案1】:

我不相信你能做到这一点,因为 VSIX 包不能在任意位置安装文件,而且 msbuild 任务需要放在 msbuild 文件夹中。

【讨论】:

  • 我找到了更多信息。你是对的。 VSIX 完全不支持这一点,文档说要使用常规的 MSI 安装包。请参阅:blogs.msdn.com/b/visualstudio/archive/2010/06/09/… 在“通过 MSI 安装”部分中,它说 MSBuild 组件“必须位于特定的、众所周知的位置”,而 VSIX 不支持。
【解决方案2】:

Visual Studio 2017/2019 的解决方案可能在 2010 年有效(因为当时 Microsoft.VisualStudio.TemplateWizard 可用),它是创建一个向导并在替换字典中设置扩展安装位置的路径并将模板中的替换与 UsingTask 一起使用。

public class ProjectLocationWizard : IWizard
{
    public void BeforeOpeningFile(ProjectItem projectItem)
    {
    }

    public void ProjectFinishedGenerating(Project project)
    {
    }

    public void ProjectItemFinishedGenerating(ProjectItem projectItem)
    {
    }

    public void RunFinished()
    {
    }

    public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
    {
        var wizardDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
        replacementsDictionary.Add("$installlocation$", wizardDirectory);
    }

    public bool ShouldAddProjectItem(string filePath)
    {
        return true;
    }
}

<UsingTask AssemblyFile="$installlocation$\MyTask.dll" TaskName="MyTask" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2012-10-29
    相关资源
    最近更新 更多