有一段时间我们在剃刀文件中使用了一些新的c#7.0功能.我们已将Roslyn编译器集成到我们的Web项目中,这些项目目前正在针对.NET Framework 4.6.2.
今天我想在剃刀文件中试用元组,如下所示:
@functions
{
public (string labelName, string sfName) GetNames(PurchaseType purchaseType)
{
switch (purchaseType)
{
case PurchaseType.New:
return (labelName: Booklist.New, sfName: SpecflowIdentifiers.BooklistItem.CheckBoxNew);
case PurchaseType.Rental:
return (labelName: Booklist.Rent, sfName: SpecflowIdentifiers.BooklistItem.CheckBoxRental);
case PurchaseType.SecondHand:
return (labelName: Booklist.Secondhand, sfName: SpecflowIdentifiers.BooklistItem.CheckBoxSecondHand);
default:
throw new ArgumentOutOfRangeException(nameof(purchaseType), @"should not get here");
}
}
}
@helper RenderCheckbox(PurchaseType purchaseType, int index, decimal priceTo)
{
var names = GetNames(purchaseType);
var x = name.labelName;
// render something
}
Run Code Online (Sandbox Code Playgroud)
这会产生以下运行时异常:
CS8137:无法定义使用元组的类或成员,因为无法找到编译器所需类型"System.Runtime.CompilerServices.TupleElementNamesAttribute".你错过了参考吗?
CS8179:未定义或导入预定义类型'System.ValueTuple`2'
这导致我/sf/answers/2857874561/提到我应该将System.ValueTuple包添加到项目中.但我已经添加了这个.
这些是配置中使用的包:
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" …Run Code Online (Sandbox Code Playgroud) 目前我正在尝试创建Web部署包.所以我在我的项目的根目录中添加了一个parameters.xml,并指定了一些自定义参数.我发现我的很多参数都是一样的.所以我想做一些参数引用.寻找这个,我来了Web应用程序包的 accros 参考.在那里它说:
隐藏 - 作为安装UI的一部分,不向用户显示隐藏参数.隐藏参数必须设置defaultValue.这些参数用于设置硬编码的默认值或设置计算的默认值.在建立参数以供将来使用时,有时会使用硬编码默认值.计算值用于从其他参数构造参数的值.构造计算值时,可以通过将{} s包围的其他参数名称放在您想要值的位置来引用其他参数.有关此标记的常见用法,请参阅示例中的"连接字符串"参数.
因此,根据文档,通过在"vdeDashboardAddress"上设置属性defaultValue ="https:// {vdeHostname} /"和tags ="Hidden",可以从"vdeDashboardAddress"引用参数"vdeHostName".
这导致我为parameters.xml提供以下代码:
<parameters>
<parameter name="vdeHostname" description="Please provide the hostname" defaultValue="www.test.com">
<description culture="en">The hostname of the website.</description>
<parameterEntry kind="XmlFile"
scope="obj\\Release\\Package\\PackageTmp\\Configuration\\hosts\.config$"
match="/hostConfigurationSection/hostConfigurations/add[@name='Default']/@host" />
</parameter>
<parameter name="vdeDashboardAddress" defaultValue="https://{vdeHostname}/" tags="Hidden">
<description culture="en">The https address of the Dashboard.</description>
<parameterEntry kind="XmlFile"
scope="obj\\Release\\Package\\PackageTmp\\Configuration\\identity\.config$"
match="/system.identityModel/identityConfiguration[@name='Default']/audienceUris/add/@value" />
</parameter>
<parameters>
Run Code Online (Sandbox Code Playgroud)
但是,情况似乎并非如此.它不引用/替换defaultValue中属性的各个部分.目前正在输出:
<audienceUris>
<add value="https://{vdeHostname}/" />
</audienceUris>
Run Code Online (Sandbox Code Playgroud)
我在这里找到的唯一提到我的问题的线程是如何让Deploy.cmd填充Parameters.xml中的替换字段
先感谢您!
最好的问候,rdvanbuuren