20
votes

I have a .Net standard 2.0 library. In this library I have a T4 file. The file contains these rows.

<#
            foreach (MessageType enumValue in Enum.GetValues(typeof(MessageType)))
            {
                var name = Enum.GetName(typeof(MessageType), enumValue);
#>

I get the following error in Visual Studio.

Compiling transformation: The type 'Enum' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.

How can I add a reference to 'netstandard'?

3

3 Answers

19
votes

Alternatively, you can use

<#@ assembly name="NetStandard" #>
4
votes

I had similar issue. I've solved this with adding reference inside t4 to file on disk

<#@ assembly Name="C:\Program Files\dotnet\sdk\2.1.4\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dll" #>

if You don't have that file try to find netstandard.dll inside directory "C:\Program Files\dotnet\sdk"

4
votes

This became an issue for us in the last few days. In addition we needed a solution that would work on all dev machines and all build machines.

So basically we copied the C:\Program Files\dotnet\sdk\2.1.4\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dll file (and a couple of other standard files we needed) into a TTLibs folder under the solution.

Then we made the references in the TT solution-relative like this: <#@ assembly Name="$(SolutionDir)TTLib\netstandard.dll" #>