我最近开始使用LuaInterface来让Lua脚本在我的C#程序中运行。为了从Visual Studio中轻松创建Lua脚本,我安装了一个Lua语法高亮插件并创建了一个项目模板,这样我就可以通过右键单击项目文件并选择“New Item-> Lua Script”来创建新脚本。这很有效。
为了让程序找到脚本,需要将它们放在构建位置的同一目录(或子目录)中。这正是我想要的地方,但为了做到这一点,我必须为我创建的每个新文件更改“复制到输出目录”设置。
有没有办法更改此选项的默认设置?现在它默认为“不要复制”。我只能找到one other question基本上要求相同的东西,但是那里提供的唯一答案是建议将构建后事件复制到具有相同扩展名的所有文件到定义的位置。我真的不想这样做,因为目标目的地可能会改变或者可能会添加更多目标(并且需要额外的事件?),我希望能够在每个文件的基础上更改该设置。
这只是一个方便的问题,因为我可以为每个文件手动更改该选项,但是已经能够自动执行剩余的过程,我希望我也可以自动完成最后一个细节。
答案 0 :(得分:4)
您应该能够为模板添加IWizard
引用,当您单击文件中的 ok 时,这将会运行。添加窗口。您需要add the assembly and type到vstemplate文件。
实施RunFinished
或可能ProjectItemFinishedGenerating
方法。然后,您可以使用Visual Studio公开的EnvDTE
对象,使用标准的Visual Studio可扩展性模型处理解决方案中的任何项目。
The following code snippit(来自开源T4工具箱)显示了如何设置此属性。
/// <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);
}
}