【问题标题】:T4 TransformOnBuild, how to ensure dependent assemblies are copied into $(TargetDir)T4 TransformOnBuild,如何确保将依赖程序集复制到 $(TargetDir)
【发布时间】:2021-03-27 03:14:55
【问题描述】:

我正在尝试创建一个部署一些 T4 .ttinclude 文件的 NuGet 包,这些文件又依赖于许多引用的程序集。但是当我尝试启用时,我在使用项目时遇到了问题

.ttinclude 文件旨在使用以下语法引用所需的程序集:

<#@ assembly name="$(TargetDir)WidgetDatabase.dll" #>

在我的 NuGet 包的目标文件中,我配置 T4ParameterValues 以便将 $(TargetDir) 传递给 T4 文本转换器:

<ItemGroup>
  <T4ParameterValues Include="TargetDir">
    <Value>$(TargetDir)</Value>
    <Visible>false</Visible>
  </T4ParameterValues>
</ItemGroup>

在目标 .csproj 中,我有以下内容:

<PropertyGroup>
  <TransformOnBuild>true</TransformOnBuild>
</PropertyGroup>
<ItemGroup>
  <PackageReference Include="WidgetDatabase">
    <Version>0.8.1-alpha</Version>
  </PackageReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v16.0\TextTemplating\Microsoft.TextTemplating.targets" />

问题是 T4 文本转换发生在构建之前,但这意味着没有任何引用的程序集被复制到 $(TargetDir)。如何在文本转换目标运行之前强制将依赖项复制到 $(TargetDir) 中?

This question 相关,但不能令人满意地解决此问题。

【问题讨论】:

    标签: msbuild visual-studio-2017 visual-studio-2019 nuget-package t4


    【解决方案1】:

    我遇到了同样的问题,我设法通过从 NuGet 包文件夹中引用程序集来解决这个问题,而不是尝试将其复制到 $(TargetDir)

    NuGet 5.0 提供了一个GeneratePathProperty 属性,您可以将其添加到PackageReference。这将创建一个指向使用包的位置的 MSBuild 属性:

    <ItemGroup>
      <PackageReference Include="WidgetDatabase" GeneratePathProperty="true">
        <Version>0.8.1-alpha</Version>
      </PackageReference>
    </ItemGroup>
    

    然后可以将此属性添加到T4ParameterValues,以便可以从您的 T4 模板中使用它:

    <ItemGroup>
      <T4ParameterValues Include="PkgWidgetDatabase">
        <Value>$(PkgWidgetDatabase)</Value>
        <Visible>false</Visible>
      </T4ParameterValues>
    </ItemGroup>
    
    <#@ assembly name="$(PkgWidgetDatabase)\lib\netstandard2.0\WidgetDatabase.dll" #>
    

    这种方法的好处在于它适用于 MSBuild 和 Visual Studio 设计时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-06
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多