小编ash*_*eek的帖子

Wix Nuget 包

所以这里是场景:我有几个 wix 项目,它们具有完全相同的额外 msbuild 目标和任务来自动执行一些非常乏味的任务:例如构建帮助文件和使用 signtool.exe 对 msi 和输出文件进行签名的验证码。

每次修复时都厌倦了将这些脚本的更改复制到 5 个不同的存储库中。所以我变聪明了,我把它们变成了 nuget 包,在 build 文件夹中有一个 .targets 文件。一个简单的 nuget restore 将包的清单变成目标文件。

问题 维克斯V3不喜欢的包。它不支持包引用,所以 packages.config 看起来像这样。除了visual studio 不喜欢packages.config。它会很高兴地恢复包(到我用 nuget.config 指定的文件夹中),但没有自动导入 .targets 文件。

很容易修复:我刚刚在我的 wixproj 文件中添加了一个导入语句。除了visual studio在运行恢复操作后不会自动重新评估wixproj。我们可以解决这个问题,但是每次包更改时都必须构建、卸载项目、重新加载项目和重新构建,这真的很烦人。

所以我试图修复它 我爬过标准 C# 项目构建的日志输出并发现了 Nuget.Targets 文件,该文件可以导入到项目中以提供packrestore定位。它还让我可以转换为 packagereferences,这比packages.config 更方便也更简洁,但我仍然需要手动为 nuget.g.targets 和 nuget.g.props 文件添加导入语句restore目标。

而且,由于我必须手动导入这些文件,我又回到了构建、卸载、重新加载、重建工作流程。

第 2 次尝试 我通过密集的 Internet 搜索发现 msbuild 最近/restore在其命令行实用程序中添加了一个标志,专门用于在恢复包后强制重新评估项目。这适用于命令行,但视觉工作室似乎毫无头绪。(也许是因为 wix v3 在 Visual Studio 模板中在幕后做了一些事情?)无论如何,他们在问题说明中提到他们本质上是使用具有新全局属性的 msbuild 任务来强制重新评估。所以我试图在我的 wixproj 的预构建事件中添加这样一个步骤,但没有酱。

问题

在运行恢复后,如何告诉 Visual Studio 重新评估此 wixproj?是否需要将某种属性或项目组添加到 …

msbuild wix nuget-package-restore wix3.11

7
推荐指数
0
解决办法
671
查看次数

使用 linq 展平 KeyValuePair<string, List<string>> 对象

因此,基本上我在 C# 中实现 MultiMap,并且采用了显而易见的方法:使用使用 List 作为值的 Dictionary 对象。接下来,我需要返回键值对的扁平列表:List<KeyValuePair<TKey, TValue>>。使用循环来完成这件事还不错,但我很好奇如何使用 Linq 来完成这件事。

我使用 SelectMany 函数接近了,但我不太清楚如何从 A 点到 B 点。这是我的代码,无需 Linq 即可完成此操作(减去您不关心的其他位)。

public class MultiDict<TKey, TValue>
{
    private Dictionary<TKey, List<TValue>> _dict = new Dictionary<TKey, List<TValue>>();

    public void AddValue(TKey key, TValue val)
    {
        List<TValue> list;
        if (_dict.ContainsKey(key))
        {
            list = _dict[key];
        }
        else
        {
            list = new List<TValue>();
            _dict.Add(key, list);
        }
        list.add(val);
    }

    public KeyValuePair<TKey, TValue>[] Flattened() 
    {
        var flattened = new List<KeyValuePair<TKey, TValue>>();
        foreach (var pair in _dict)
        {
            //pair.Value …
Run Code Online (Sandbox Code Playgroud)

c# linq dictionary

1
推荐指数
1
解决办法
2151
查看次数

标签 统计

c# ×1

dictionary ×1

linq ×1

msbuild ×1

nuget-package-restore ×1

wix ×1

wix3.11 ×1