0

Я создаю пакет nuget, и я хочу, чтобы он добавлял скрипт js при установке в любом проекте. Файл .js должен иметь установленное действие сборки для встроенного ресурса.Nuget файл с типом сборки, установленным для Embedded Resource

Я попытался добавить Install.ps1 скрипт для упаковки с содержанием ниже:

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

$item = $project.projectItems.Item("my_script.js") 
$item.Properties.Item("BuildAction").Value = [int]3 

но он возвращает ошибку:

Вы не можете вызвать метод выражения нуль-значной. + $ item.Properties.Item («BuildAction»). Value = [INT] 3

я думаю, что ошибка происходит потому, что Install.ps1 скрипт запускается перед добавлением файлов пакета для решения поэтому нет my_script.js поэтому мы можем 't изменить его действие на строительство ...

так, как мы это делаем?

Есть ли способ запустить скрипт после развертывания файлов в проекте? более

Update

Единственное, что может быть проблема в том, что my_script.js не в корне Content папки. Должен ли я обращаться к его пути, когда я звоню:

$project.projectItems.Item("myfolder/my_script.js")?

Update 2

Неа! проблема существует даже после обращения к папке, как указано выше.

+1

Сценарий install.ps1 запускается последним. Он не запускается до того, как файлы будут добавлены в проект. Я бы посмотрел ваш сценарий PowerShell в консоли диспетчера пакетов, чтобы узнать, работает ли он. Также добавляется ли ваш файл my_script.js в корень проекта? –

+0

Да! Хотя он выдает это исключение, он добавляет файл ... – AmiNadimi

ответ

0

Проблема заключалась в том, что, когда вы хотите получить доступ к файлу, который не находится в корневой директории проекта, вы должны сделать это, как показано ниже: (т.е. код, используемый в вопросе)

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

$item = $project.ProjectItems.Item("myfolder") 
$item2 = $item.ProjectItems.Item("script.js") 
$item2.Properties.Item("BuildAction").Value = [int]3 

файл script.js в папке myfolder, (полный путь к файлу относительно каталога проекта: myfolder/script.js)

0

Я протестировал ваш скрипт .ps1 и добавил файл сценария js как встроенный ресурс при установке пакета NuGet. Пожалуйста, проверьте ваш файл .nuspec для вашего пакета, убедитесь, что .ps1 назван install.ps1 и он добавлен в папку «Инструменты».

Узел в вашем файле .nuspec для вашего пакета nuget должен быть таким же, как показано ниже, который успешно прошел проверку на моей стороне.

<?xml version="1.0"?> 
<package > 
    <metadata> 
    <id>BuildActionTest</id> 
    <version>1.0.0</version> 
    <authors>AuthorName</authors> 
    <owners>OwnerName</owners> 
    <description>Test Buid Action</description> 
    <releaseNotes>Test Buid Action</releaseNotes> 
    <copyright>Copyright 2017</copyright> 
    <tags>Build Action</tags> 
    </metadata> 
    <files> 
    <file src="JavaScript1.js" target="Content"/> 
    <file src="install.ps1" target="tools"/> 
    </files> 
</package> 
+0

Мой скрипт называется Install.ps1, одна вещь, которая может быть реальной проблемой, заключается в том, что я не определял свои файлы.nuspec, как вы это делали, обязательно указывать все мои файлы в манифесте? их слишком много! – AmiNadimi

+0

Еще одна проблема, которая может быть связана с тем, что my_script.js не находится в корне папки содержимого. Должен ли я обращаться к его пути, когда я звоню: '$ project.projectItems.Item (" myfolder/my_script.js ")'? – AmiNadimi

+0

@Amin Nadimi Вам не нужно добавлять путь к файлу в файл ps1. Таким образом, вы все равно можете получить файл my_script.js с «$ project.projectItems.Item (« myfolder/my_script.js »)». Вы можете добавить все файлы в файл манифеста с помощью «*». Например, вы можете добавить все js-файлы, вы можете использовать <файл src = "*. Js" target = "Content" />. –