0

我将值传递给 T4Scaffolding.Scaffolder 的前两个参数。但它不工作我例外。

这是 powershell 脚本文件。让我们给它一个名字Test.ps1

[T4Scaffolding.Scaffolder(Description = "Enter a description of Service here")][CmdletBinding()]
param(        
    [string]$ClassName,
    [string]$Project,
    [string]$CodeLanguage,
    [string[]]$TemplateFolders,
    [switch]$Force = $false
)

Write-Host "Class name is " $ClassName
Write-host "Project name is" $Project

然后我在包管理器控制台上运行它如下

PM> Scaffold Test Member ConsoleApplication1.Domain

它正确打印了我的 ClassName 但项目名称是在 nuget 包管理器控制台上选择的名称,而不是我提供的名称。

Class name is  Member
Project name is ConsoleApplication1.Scaffolder

但例外的结果是

Class name is  Member
Project name is ConsoleApplication1.Domain

现在的问题是如何将 ClassName 和 Project 作为参数传递?它只是将 ClassName 作为参数,但忽略第二个参数。

已编辑

也试过这个,但也没有用。

Scaffold Service -ClassName Member -Project ConsoleApplication1.Domain
4

2 回答 2

0

在删除 T4Scaffolding 属性后,从 powershell 控制台调用您的脚本,称为 Scaffold.ps1,如下所示:

.\Scaffold Test Member ConsoleApplication1.Domain

将返回

Class name is  Test
Project name is Member

正如预期的那样。我不知道你为什么说你得到不同的结果,但即使是你预期的结果也不是预期的。

像这样称呼它:

Scaffold Service -ClassName Member -Project ConsoleApplication1.Domain

是否给出了您预期的结果

Class name is  Member
Project name is ConsoleApplication1.Domain

$CodeLanguage 将是服务

所以也许是 NuGet 包管理器控制台在做一些不同的事情

于 2013-05-18T23:08:18.370 回答
0

默认的 $Project 参数与您在 PMC 中选择的项目相同。

要将代码脚手架到另一个项目(或添加一个新项目)中,您可以这样做......

[T4Scaffolding.Scaffolder(Description = "Description here...")][CmdletBinding()]
param([parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true)][string]$ProjectName = "",     
[string]$Project,
[string]$CodeLanguage,
[string[]]$TemplateFolders,
[switch]$Force = $false)

请注意,“ProjectName”将通过属性名称从管道中检索......所以如下。

Scaffold Service -projectname SomeProjectName

将 $ProjectName 的值设置为“SomeProjectName”..

在此之后,您可以使用此名称做任何您喜欢的事情...如果项目已经存在,则将代码添加到项目中,如果项目尚未在解决方案中,则将其添加到自己的项目中。

例子:

#
#Add new project if it does not exist
#
if(($DTE.Solution.Projects | Select-Object -ExpandProperty Name) -notcontains $ProjectName){
Write-Host "Adding new project"
$sln = [System.IO.Path]::GetFilename($dte.DTE.Solution.FullName)
$path = $dte.DTE.Solution.FullName.Replace($sln,'').Replace('\\','\')
$sln = Get-Interface $dte.Solution ([EnvDTE80.Solution2])
$templatePath = $sln.GetProjectTemplate("ClassLibrary.zip","CSharp")
$sln.AddFromTemplate($templatePath, $path+$ProjectName,$ProjectName)
$file = Get-ProjectItem "Class1.cs" -Project $ProjectName
$file.Remove()
于 2013-08-25T18:10:24.373 回答