Ich schreibe ein Bat-Skript, um ein Projektverzeichnis zu erstellen und dann Dotnet-Projekte zu erstellen. Im Skript versuche ich, durch Referenzierung auf die CSPROJ-Datei zuzugreifen. Das Problem, das ich habe, ist, dass der Verzeichnisname nicht übernommen wird. Mein Bat-Skript akzeptiert zwei Eingaben, das Projektverzeichnis und den Projektnamen.
echo %1
md %1
cd %1
echo %2
::Create Directory Structure
md src
md documentation
md "documentation/SystemDocuments"
md "documentation/Diagrams"
::Create Solution Structure
cd src
dotnet new sln --name %2
dotnet new console -o %2
set "test=%2%\%2%.csproj"
echo %test% :: This value is wrong
echo %2%\%2%.csproj
dotnet sln add %2%\%2%.csproj
Wenn ich also den obigen Code mit der Eingabe „irgendein Verzeichnis“ testProject ausführe, erwarte ich, dass das erste und zweite Echo testProject\testProject.csproj ist, und es ist testProject.csproj. Was mache ich bei der Zeichenfolgenverkettung falsch?
Beispiel Programmausführung: CMD: ProjectCreation.bat D:\repos\ProjectSetup\Test TestApp
Terminalausgabe:
D:\repos\ProjectSetup>echo D:\repos\ProjectSetup\Test
D:\repos\ProjectSetup\Test
D:\repos\ProjectSetup>md D:\repos\ProjectSetup\Test
D:\repos\ProjectSetup>cd D:\repos\ProjectSetup\Test
D:\repos\ProjectSetup\Test>echo TestApp
TestApp ::Output of %2
D:\repos\ProjectSetup\Test>md src
D:\repos\ProjectSetup\Test>md documentation
D:\repos\ProjectSetup\Test>md "documentation/SystemDocuments"
D:\repos\ProjectSetup\Test>md "documentation/Diagrams"
D:\repos\ProjectSetup\Test>cd src
D:\repos\ProjectSetup\Test\src>dotnet new sln --name TestApp
The template "Solution File" was created successfully.
D:\repos\ProjectSetup\Test\src>dotnet new console -o TestApp
The template "Console App" was created successfully.
Processing post-creation actions...
Running 'dotnet restore' on D:\repos\ProjectSetup\Test\src\TestApp\TestApp.csproj...
Determining projects to restore...
Restored D:\repos\ProjectSetup\Test\src\TestApp\TestApp.csproj (in 111 ms).
Restore succeeded.
D:\repos\ProjectSetup\Test\src>set "test=TestApp2.csproj"
D:\repos\ProjectSetup\Test\src>echo TestApp2.csproj
TestApp2.csproj
D:\repos\ProjectSetup\Test\src>echo TestApp2.csproj
TestApp2.csproj
D:\repos\ProjectSetup\Test\src>dotnet sln add TestApp2.csproj
Could not find project or directory `TestApp2.csproj`.
Description:
Add one or more projects to a solution file.
Usage:
dotnet [options] sln <SLN_FILE> add [<PROJECT_PATH>...]
Arguments:
<SLN_FILE> The solution file to operate on. If not specified, the command will search the current directory for one. [default: D:\repos\ProjectSetup\Test\src\]
<PROJECT_PATH> The paths to the projects to add to the solution.
Options:
--in-root Place project in root of the solution, rather than creating a solution folder.
-s, --solution-folder <solution-folder> The destination solution folder path to add the projects to.
-?, -h, --help Show command line help.
Antwort1
Das Problem ist dieser Befehl:
set "test=%2\%2.csproj"
Das Problem war die Verwendung von %2%
anstelle von %2
.