在 .csproj 文件中手动添加 Elmah 和 ApplicationInsights
Posted
技术标签:
【中文标题】在 .csproj 文件中手动添加 Elmah 和 ApplicationInsights【英文标题】:Manually adding Elmah & ApplicationInsights in .csproj file 【发布时间】:2022-01-19 15:08:47 【问题描述】:我创建了一个多项目模板并将其与向导连接起来。
一切正常,我可以在包控制台管理器中使用update-package -reinstall
恢复包。
我正在尝试在模板的 .csproj
文件中添加带有条件的 Elmah 和 ApplicationInsights,以便它根据向导的答案添加 Elmah 或 ApplicationInsights。
我尝试执行以下操作,但没有成功:
<Reference Include="elmah, Version=1.2.2, Culture=neutral" Condition="$($ext_custommessage$) == 'LAN'" />
我尝试将它添加到 <ItemGroup>
元素中,但没有骰子。
在这种情况下我应该怎么做才能将这些包添加到.csproj
文件中?
【问题讨论】:
【参考方案1】:我认为最简单的方法是安装这两个软件包。然后只在 localhost 上运行时配置 ELMAH。我猜你有web.config
和web.release.config
文件。然后,您在 web.config
之一中包含 ELMAH 配置,但在 web.release.config
之一中使用 XDT 将其删除。这里基本上是反向描述的:https://docs.elmah.io/use-multiple-logs-for-different-environments/#logging-to-elmahio-from-production-only(仅从生产中记录)。此外,该示例适用于 elmah.io(ELMAH 的云版本),但您可以使用任何您喜欢的记录器实现。我不确定您将如何配置 AI,但您可能可以在那里使用类似的方法。
【讨论】:
感谢您的回复!我通过将自定义参数从向导传递给packages.config
解决了这个问题,然后根据自定义参数更改<package>
元素,而不是修改csproj
文件。然后无论谁使用该模板,他们都会运行update-package -reinstall
,这将安装所需的 NuGet 包并恢复其他所有内容。感谢您抽出时间回复!【参考方案2】:
我通过以下方式实现了目标:
向连接到模板的自定义向导添加了两个自定义参数。一个参数用于包名称/id,一个参数用于包版本。这些参数的值是根据用户在向导中的选择设置的。这两个参数是在自定义向导的RunStarted
方法中使用Dictionary<string, string> replacementsDictionary
传递的。
在项目模板文件夹中的packages.config
文件中添加了以下行:
<package id="$package$" version="$version$" targetFramework="net48" />
$package$
是具有包名称的参数。
$version$
是包的版本。
我还在项目的.vstemplate
文件中添加了以下内容:
<ProjectItem ReplaceParameters = "true" TargetFileName="packages.config" >packages.config</ProjectItem>
这是必需的,以便将参数替换为所需的包信息。
一旦用户在包控制台管理器中运行update-package -reinstall
,就会安装所需的包,并恢复其他包。
【讨论】:
以上是关于在 .csproj 文件中手动添加 Elmah 和 ApplicationInsights的主要内容,如果未能解决你的问题,请参考以下文章