4

我有许多用于 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 组件”和“自定义扩展类型”——但似乎都没有。

4

2 回答 2

1

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

于 2010-08-12T21:18:30.227 回答
0

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" />
于 2020-07-11T12:14:36.643 回答