C# MSBuild未解析路径内的参数

C# MSBuild未解析路径内的参数,c#,tfs,msbuild,t4,C#,Tfs,Msbuild,T4,我必须使用ms build运行文本转换文件,所以我使用转换作为目标。为了在我的项目中运行它,我必须传递一些路径来获取资源DLL。所以我的命令是 D:\WorkSpace\Projects\Client\Dev\Project\Lw.Domain.Project>msbuild /tv:15.0 /t:transform /p:TransformFile="ProjectEntityModelGenerator.tt" /p:SolutionDir=".." /p:FrameworkVer

我必须使用ms build运行文本转换文件,所以我使用转换作为目标。为了在我的项目中运行它,我必须传递一些路径来获取资源DLL。所以我的命令是

D:\WorkSpace\Projects\Client\Dev\Project\Lw.Domain.Project>msbuild  /tv:15.0 /t:transform /p:TransformFile="ProjectEntityModelGenerator.tt" /p:SolutionDir=".." /p:FrameworkVersion=4 /p:MetaModelFolder="$(SolutionDir)\packages\LW.Framework$(FrameworkVersion)" /p:BaseResourceFolder="$(SolutionDir)\packages\LW.Framework$(FrameworkVersion)" /p:FrameworkReference="package" /p:IsFromMSBuild="true"
但它并没有解决路径问题,所以我得到了如下问题

C:\Program Files(x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0\TextTemplating\Microsoft.TextTemplating.targets(340,5): 错误:System.IO.FileNotFoundException:找不到 路径 “D:\WorkSpace\Projects\Client\Dev\Project\Lw.Domain.Project\$(SolutionDir)\packages\Lw.FrameworkVersion$(FrameworkVersion)Lw.System.Metamodel.dll”

我的csproj文件中有什么遗漏吗?下面是我的csproj文件配置

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <PropertyGroup>
    <!-- Get the Visual Studio version – defaults to 10: -->
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
    <!-- Keep the next element all on one line: -->
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
    <SolutionDir>$(SolutionDir)</SolutionDir>
    <FrameworkVersion>$(FrameworkVersion)</FrameworkVersion>
    <MetaModelFolder>$(SolutionDir)\packages\LW.Framework$(FrameworkVersion)\</MetaModelFolder>
    <BaseResourceFolder>$(SolutionDir)\packages\LW.Framework$(FrameworkVersion)\</BaseResourceFolder>
    <IsFromMSBuild>$(IsFromMSBuild)</IsFromMSBuild>
    <ComputedSolutionDir>$([System.IO.Path]::GetFullPath($([System.IO.Path]::Combine($(ProjectDir),"..\\"))))</ComputedSolutionDir>
    <DomainResourceFolder>$(SolutionDir)..\Product\Lw.Domain\bin\$(Configuration)\</DomainResourceFolder>
  </PropertyGroup>
  <Import Project="$(VSToolsPath)\TextTemplating\Microsoft.TextTemplating.targets" Condition="'$(VisualStudioVersion)' == '15.0'" />

10
$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
$(SolutionDir)
$(框架版本)
$(SolutionDir)\packages\LW.Framework$(框架版本)\
$(SolutionDir)\packages\LW.Framework$(框架版本)\
$(IsFromMSBuild)
$([System.IO.Path]::GetFullPath($([System.IO.Path]::合并($(ProjectDir),“.\\”))
$(SolutionDir)…\Product\Lw.Domain\bin\$(配置)\

我在本地项目上进行了测试,发现无法使用csproj文件中相同的语法
“$()”
在命令行中传递属性

您需要将BaseResourceFolder的确切物理路径传递给命令行。从下面的错误。BaseResourceFolder的值末尾也缺少一个“\”

“D:\WorkSpace\Projects\Client\Dev\Project\Lw.Domain.Project\$(SolutionDir)\packages\Lw.FrameworkVersion$(FrameworkVersion)Lw.System.Metamodel.dll”


希望以上内容对您有所帮助。

我的csproj文件中是否有遗漏?我不知道;您没有发布您的CSProj文件。您好@azhahes.s您是否查看了上述答案,进展如何?如果有任何问题,请告诉我。谢谢@levi。请查看我的新手机
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <PropertyGroup>
    <!-- Get the Visual Studio version – defaults to 10: -->
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
    <!-- Keep the next element all on one line: -->
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
    <SolutionDir>$(SolutionDir)</SolutionDir>
    <FrameworkVersion>$(FrameworkVersion)</FrameworkVersion>
    <MetaModelFolder>$(SolutionDir)\packages\LW.Framework$(FrameworkVersion)\</MetaModelFolder>
    <BaseResourceFolder>$(SolutionDir)\packages\LW.Framework$(FrameworkVersion)\</BaseResourceFolder>
    <IsFromMSBuild>$(IsFromMSBuild)</IsFromMSBuild>
    <ComputedSolutionDir>$([System.IO.Path]::GetFullPath($([System.IO.Path]::Combine($(ProjectDir),"..\\"))))</ComputedSolutionDir>
    <DomainResourceFolder>$(SolutionDir)..\Product\Lw.Domain\bin\$(Configuration)\</DomainResourceFolder>
  </PropertyGroup>
  <Import Project="$(VSToolsPath)\TextTemplating\Microsoft.TextTemplating.targets" Condition="'$(VisualStudioVersion)' == '15.0'" />
/p:BaseResourceFolder="(phsical path to BaseResourceFolder)\"