Como dizer ao nuget para adicionar arquivos de recursos de pacote como links, e não copiá-los para o diretório do projeto

jACC

Introdução (como empacotar recursos em um pacote nuget)

Para empacotar alguns arquivos de recursos em um pacote nuget, o que alguém normalmente faria é o seguinte.

Coloque todos os arquivos de recursos no content\diretório de um pacote nuget. Isso seria especificado pela seguinte linha em um .nuspecarquivo:

<files>
  <file src="Project\bin\Release\script.js" target="content\js\script.js" />
<files>

Agora, quando este pacote nuget é instalado AnotherProject, a seguinte estrutura de arquivo surge:

Solution.sln
packages\Project.1.0.0\content\js\script.js  // the original resource file
AnotherProject\js\script.js                  // a physical copy 
AnotherProject\AnotherProject.csproj         // <Content /> tag (see below)

Durante a instalação do pacote, AnotherProject.csprojfoi injetado com a tag:

<Content Include="js\script.js" />

e isso é para a cópia física do recurso original (que está no packages\diretório).

O problema real (como empacotar recursos em um pacote nuget como link)

Meu objetivo não é ter a cópia física de um arquivo de recurso no AnotherProjectdiretório, mas sim um "link" para o recurso original no packages\diretório. No csproj, deve ser assim:

<Content Include="packages\Project.1.0.0\content\js\script.js">
  <Link>js\script.js</Link>
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>

Solução de força bruta que prefiro evitar

Agora, uma solução alternativa "faça da maneira mais difícil" que posso pensar é:

  • não colocar arquivos de recursos content\para que não sejam adicionados automaticamente,
  • escrever um Install.ps1script que iria hackear a estrutura do arquivo csproj e adicionar a parte XML necessária manualmente,

Isso, no entanto, tem as seguintes desvantagens:

  • todos os meus pacotes nuget precisam da mesma parte do script em seus Install.ps1,
  • ao instalar meus pacotes, haveria um desagradável "prompt de recarregamento de projeto" no Visual Studio.
Matt Ward

Como o NuGet atualmente não oferece suporte para isso, suas opções são usar o PowerShell ou um destino MSBuild personalizado.

PowerShell

  • Deixe seus recursos fora do diretório de conteúdo em seu pacote NuGet (como você já sugeriu).
  • Adicione o link do arquivo usando o PowerShell no install.ps1.

Você deve ser capaz de evitar o prompt de recarregamento do projeto se usar o modelo de objeto do Visual Studio (EnvDTE). Eu daria uma olhada em Project.ProjectItems.AddFromFile (...) para ver se isso funciona para você.

Alvo MSBuild

  • NuGet oferece suporte à adição de uma instrução de importação em um projeto que aponta para um arquivo MSBuild .props e / ou .targets. Portanto, você pode colocar seus recursos no diretório de ferramentas do seu pacote NuGet e referenciá-los a partir de um arquivo MSBuild .props / .targets personalizado.

Normalmente, os .props e .targets personalizados são usados ​​para personalizar o processo de construção. No entanto, eles são apenas arquivos de projeto MSBuild para que você possa adicionar itens para seus recursos a esses arquivos de projeto.

Observe que .props são importados no início do arquivo de projeto quando um pacote NuGet é instalado, enquanto .targets são importados no final do projeto.

Personalizando NuGet

Outra opção, que daria mais trabalho, seria modificar o NuGet para oferecer suporte ao que você deseja fazer.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

TOP lista

  1. 1

    R Shiny: use HTML em funções (como textInput, checkboxGroupInput)

  2. 2

    O Chromium e o Firefox exibem as cores de maneira diferente e não sei qual deles está fazendo certo

  3. 3

    Como assinar digitalmente um documento PDF com assinatura e texto visíveis usando Java

  4. 4

    R Folheto. Dados de pontos de grupo em células para resumir muitos pontos de dados

  5. 5

    Gerenciar recurso shake de Windows Aero com barra de título personalizado

  6. 6

    Como obter dados API adequados para o aplicativo angular?

  7. 7

    UITextView não está exibindo texto longo

  8. 8

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  9. 9

    Acessando relatório de campanhas na AdMob usando a API do Adsense

  10. 10

    Usando o plug-in Platform.js do Google

  11. 11

    Como posso modificar esse algoritmo de linha de visada para aceitar raios que passam pelos cantos?

  12. 12

    Dependência circular de diálogo personalizado

  13. 13

    Coloque uma caixa de texto HTML em uma imagem em uma posição fixa para site para desktop e celular

  14. 14

    iOS: como adicionar sombra projetada e sombra de traço no UIView?

  15. 15

    Como usar a caixa de diálogo de seleção de nomes com VBA para enviar e-mail para mais de um destinatário?

  16. 16

    Tabela CSS: barra de rolagem para a primeira coluna e largura automática para a coluna restante

  17. 17

    How to create dynamic navigation menu select from database using Codeigniter?

  18. 18

    Converter valores de linha SQL em colunas

  19. 19

    ChartJS, várias linhas no rótulo do gráfico de barras

  20. 20

    用@StyleableRes注释的getStyledAttributes。禁止警告

  21. 21

    não é possível adicionar dependência para com.google.android.gms.tasks.OnSuccessListener

quentelabel

Arquivo