2013-05-18 6 views
0

T4Scaffolding.Scaffolder의 처음 두 매개 변수에 값을 전달합니다. 그러나 그것은 내가 배제한 것에 대해서는 효과가 없다.MvcScaffolders의 메서드에 매개 변수 전달

이것은 powershell 스크립트 파일입니다.

PM> Scaffold Test Member ConsoleApplication1.Domain 

을 다음 제대로 내게 클래스 이름을 인쇄하지만 프로젝트 이름은 nuget 패키지 관리자에서 선택한 하나 같이 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 

가 그럼 난 패키지 관리자 콘솔에서 실행으로 이름을 지정하자 내가 제공하는 콘솔이 아닙니다.

Class name is Member 
Project name is ConsoleApplication1.Scaffolder 

그러나 예외 결과는

Class name is Member 
Project name is ConsoleApplication1.Domain 

이제 문제는 매개 변수로 클래스 이름 및 프로젝트를 전달하는 방법입니다

입니까? ClassName은 매개 변수로 사용하지만 두 번째 매개 변수는 무시합니다. 편집을 할

은 또한이 일을 시도했지만 중 하나가 작동하지 않았다.

Scaffold Service -ClassName Member -Project ConsoleApplication1.Domain 
+0

흥미 롭. scaffolder 메소드의 마지막 4 개 매개 변수는 기본값 ($ ProjectName, $ CodeLanguage, $ TemplateFolders 및 $ Force)에서옵니다. $ ProjectName으로 새 매개 변수를 추가하면 예외로 작동합니다. 그러나 기본 $ Project 매개 변수는 항상 나를 위해 패키지 관리자 콘솔에서 선택된 매개 변수입니다. –

답변

0

같이 Scaffold.ps1라는 T4Scaffolding 속성을 제거 후 PowerShell 콘솔에서 스크립트를 호출 :

.\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 패키지 관리자 콘솔이

다른 일을하고 있어요
0

기본 $ Project 매개 변수는 이미 h입니다. ave는 PMC에서 선택한 프로젝트에 대해 설명했습니다.

는 "프로젝트 이름은"속성 이름으로 파이프 라인에서 검색됩니다

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

주 ... 다른 프로젝트에 코드를 스캐 폴딩 (또는 새 프로젝트 추가)이 같이 할 수있는을 위해 ... 그래서 다음과 같습니다.

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() 
관련 문제