1

我想为 MEF 插件编写 nuspec。我可以将 xxx.dll 复制到内容目录,如下所示。

<files>
  <file src="Alhambra\bin\Release\Plugins\Alhambra.Plugin.SqlServer.dll" target="content\Plugins\Alhambra.Plugin.SqlServer.dll" />
  <file src="Alhambra\bin\Release\Alhambra.dll" target="lib\Alhambra.dll" />
</files>

但我无法在用户项目中设置文件属性来复制输出目录。

感谢您提供任何建议或代码片段。

4

1 回答 1

0

我的方法是将插件作为单独的文件添加到项目中。为此,您需要一个安装脚本(有关此内容,请参阅NuGet 文档)。

我的解决方案是以下脚本:

参数($installPath,$toolsPath,$package,$project)

Function add_file($file)
{
    $do_add = 1
    foreach($item in $project.DTE.ActiveSolutionProjects[0].ProjectItems)
    {
        if ($item -eq $file)
        { $do_add = 0 }
    }
    if ($do_add -eq 1)
    {
        $added = $project.DTE.ItemOperations.AddExistingItem($file)
        $added.Properties.Item("CopyToOutputDirectory").Value = 2
        $added.Properties.Item("BuildAction").Value = 0        
    }
}
add_file(<file1>)
add_file(<file2>)

当然,当用户卸载包时,需要进行清理:

param($installPath, $toolsPath, $package, $project)

Function remove_file($file)
{
    foreach($item in $project.DTE.ActiveSolutionProjects[0].ProjectItems)
    {
        if ($item.Name -eq $file)
        { 
          $item.Delete() 
        }
    }
}
remove_file(<file1>)
remove_file(<file2>)
于 2012-03-23T16:21:22.160 回答