在 .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.configweb.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的主要内容,如果未能解决你的问题,请参考以下文章

.csproj文件怎么手动配置为asp.ent2.0

ELMAH - 过滤 404 错误

三分钟集成elmah xml 格式日志到mvc站点

csproj 文件中的“服务包含”有啥用?

初学C#,总结一下.sln和.csproj的区别

如何在 C# 中快速处理 csproj 文件