9

我最近开始使用 LuaInterface 来让 Lua 脚本在我的 C# 程序中工作。为了在 Visual Studio 中轻松创建 Lua 脚本,我安装了一个 Lua 语法高亮插件并创建了一个项目模板,以便我可以通过右键单击项目文件并选择“新建项目-> Lua 脚本”来创建新脚本。这工作得很好。

为了让程序找到脚本,需要将它们放在构建位置的同一目录(或子目录)中。这正是我想要它们的地方,但为了做到这一点,我必须为我创建的每个新文件更改“复制到输出目录”设置。

有没有办法改变这个选项的默认设置?现在它默认为“不复制”。我只能找到另一个问题,问基本相同的事情,但那里提供的唯一答案建议构建后事件将具有相同扩展名的所有文件复制到定义的位置。我真的不想这样做,因为目标目标可能会更改或可能会添加更多目标(并且需要额外的事件?)并且我希望能够在每个文件的基础上更改该设置。

这只是一个方便的问题,因为我可以为每个文件手动更改该选项,但是已经能够自动化其余的过程,我希望我也可以自动化最后一个细节。

4

1 回答 1

4

您应该能够添加IWizard对模板的引用,这将在您单击ok“文件”->“添加”窗口时运行。您需要将程序集和类型添加到 vstemplate 文件中。

实施RunFinished或可能实施该ProjectItemFinishedGenerating方法。然后,您可以使用EnvDTEVisual Studio 公开的对象,使用标准的 Visual Studio 可扩展性模型来操作解决方案中的任何项目。

以下代码片段(来自开源 T4 Toolbox)显示了如何设置此属性。

    /// <summary>
    /// Sets the known properties for the <see cref="ProjectItem"/> to be added to solution.
    /// </summary>
    /// <param name="projectItem">
    /// A <see cref="ProjectItem"/> that represents the generated item in the solution.
    /// </param>        
    /// <param name="output">
    /// An <see cref="OutputFile"/> that holds metadata about the <see cref="ProjectItem"/> to be added to the solution.
    /// </param>
    private static void SetProjectItemProperties(ProjectItem projectItem, OutputFile output)
    {
        // Set "Build Action" property
        if (!string.IsNullOrEmpty(output.BuildAction))
        {
            ICollection<string> buildActions = GetAvailableBuildActions(projectItem);               
            if (!buildActions.Contains(output.BuildAction))
            {
                throw new TransformationException(
                    string.Format(CultureInfo.CurrentCulture, "Build Action {0} is not supported for {1}", output.BuildAction, projectItem.Name));
            }

            SetPropertyValue(projectItem, "ItemType", output.BuildAction);
        }

        // Set "Copy to Output Directory" property
        if (output.CopyToOutputDirectory != default(CopyToOutputDirectory))
        {
            SetPropertyValue(projectItem, "CopyToOutputDirectory", (int)output.CopyToOutputDirectory);
        }

        // Set "Custom Tool" property
        if (!string.IsNullOrEmpty(output.CustomTool))
        {
            SetPropertyValue(projectItem, "CustomTool", output.CustomTool);
        }

        // Set "Custom Tool Namespace" property
        if (!string.IsNullOrEmpty(output.CustomToolNamespace))
        {
            SetPropertyValue(projectItem, "CustomToolNamespace", output.CustomToolNamespace);
        }    
    }
于 2013-02-03T19:02:22.860 回答